import external references from atfx files
diff --git a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/ATFXEntityManager.java b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/ATFXEntityManager.java
index 1700f4f..857096c 100644
--- a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/ATFXEntityManager.java
+++ b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/ATFXEntityManager.java
@@ -339,16 +339,20 @@
ElemId elemId = new ElemId(((ODSEntityType) contextDescribableEntityType).getODSID(),
ODSConverter.toODSID(contextDescribable.getID()));
try {
- T_LONGLONG[] contextRootIds = odsModelManager.getApplElemAccess().getRelInst(elemId,
- contextDescribableEntityType.getRelation(entityType).getName());
+ Optional<Relation> relation = getRelation(contextDescribableEntityType, entityType);
- if (contextRootIds != null && contextRootIds.length > 0) {
- // There can only be one result per ContextType, thus we take the first one and
- // ignore the rest
- String instanceID = Long.toString(ODSConverter.fromODSLong(contextRootIds[0]));
+ if (relation.isPresent()) {
+ T_LONGLONG[] contextRootIds = odsModelManager.getApplElemAccess().getRelInst(elemId,
+ relation.get().getName());
- contextRoots.put(contextType,
- entityLoader.load(new Key<>(ContextRoot.class, contextType), instanceID));
+ if (contextRootIds != null && contextRootIds.length > 0) {
+ // There can only be one result per ContextType, thus we take the first one and
+ // ignore the rest
+ String instanceID = Long.toString(ODSConverter.fromODSLong(contextRootIds[0]));
+
+ contextRoots.put(contextType,
+ entityLoader.load(new Key<>(ContextRoot.class, contextType), instanceID));
+ }
}
} catch (AoException e) {
throw new DataAccessException("Cannot load contextRoot '" + entityType.getName() + "' for ID '"
@@ -363,6 +367,14 @@
return contextRoots;
}
+ private Optional<Relation> getRelation(EntityType contextDescribableEntityType, EntityType entityType) {
+ try {
+ return Optional.of(contextDescribableEntityType.getRelation(entityType));
+ } catch (IllegalArgumentException e) {
+ return Optional.empty();
+ }
+ }
+
private Map<ContextType, ContextRoot> mapAttributesWithExtSystem(Map<ContextType, ContextRoot> contextRoots) {
EntityFactory entityFactory = this.context.getEntityFactory()
diff --git a/org.eclipse.mdm.api.atfxadapter/src/test/java/org/eclipse/mdm/api/atfxadapter/AtfxAdaperTest.java b/org.eclipse.mdm.api.atfxadapter/src/test/java/org/eclipse/mdm/api/atfxadapter/AtfxAdaperTest.java
index 7b17923..9236a1a 100644
--- a/org.eclipse.mdm.api.atfxadapter/src/test/java/org/eclipse/mdm/api/atfxadapter/AtfxAdaperTest.java
+++ b/org.eclipse.mdm.api.atfxadapter/src/test/java/org/eclipse/mdm/api/atfxadapter/AtfxAdaperTest.java
@@ -20,14 +20,17 @@
import java.util.Map;
import org.assertj.core.api.Assertions;
+import org.assertj.core.groups.Tuple;
import org.eclipse.mdm.api.base.ConnectionException;
import org.eclipse.mdm.api.base.massdata.ReadRequest;
import org.eclipse.mdm.api.base.model.Channel;
import org.eclipse.mdm.api.base.model.ChannelGroup;
import org.eclipse.mdm.api.base.model.ContextRoot;
import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.FileLink;
import org.eclipse.mdm.api.base.model.MeasuredValues;
import org.eclipse.mdm.api.base.model.Measurement;
+import org.eclipse.mdm.api.base.model.MimeType;
import org.eclipse.mdm.api.base.model.Test;
import org.eclipse.mdm.api.base.model.TestStep;
import org.eclipse.mdm.api.base.model.ValueType;
@@ -98,6 +101,17 @@
}
@org.junit.Test
+ public void testLoadTestStepWithExtRef() {
+
+ EntityManager em = context.getEntityManager().get();
+
+ assertThat(em.load(TestStep.class, "1").getFileLinks())
+ .extracting(FileLink::getFileName, FileLink::getDescription, FileLink::getMimeType)
+ .contains(Tuple.tuple("extref.txt", "a simple text file", new MimeType("text/plain")),
+ Tuple.tuple("openmdm.png", "openMDM Logo", new MimeType("image/png")));
+ }
+
+ @org.junit.Test
public void testLoadAllMeasurements() {
EntityManager em = context.getEntityManager().get();
diff --git a/org.eclipse.mdm.api.atfxadapter/src/test/resources/Right_Acc.atfx b/org.eclipse.mdm.api.atfxadapter/src/test/resources/Right_Acc.atfx
index a044f4f..f9594cc 100644
--- a/org.eclipse.mdm.api.atfxadapter/src/test/resources/Right_Acc.atfx
+++ b/org.eclipse.mdm.api.atfxadapter/src/test/resources/Right_Acc.atfx
@@ -2679,6 +2679,18 @@
<DateCreated>20140314170908</DateCreated>
<Optional>true</Optional>
<Sortindex>40</Sortindex>
+ <MDMLinks>
+ <external_reference>
+ <description>a simple text file</description>
+ <mimetype>text/plain</mimetype>
+ <location>extref.txt</location>
+ </external_reference>
+ <external_reference>
+ <description>openMDM Logo</description>
+ <mimetype>image/png</mimetype>
+ <location>openmdm.png</location>
+ </external_reference>
+ </MDMLinks>
<Test>1</Test>
<MeaResults>1</MeaResults>
</TestStep>
diff --git a/org.eclipse.mdm.api.atfxadapter/src/test/resources/extref.txt b/org.eclipse.mdm.api.atfxadapter/src/test/resources/extref.txt
new file mode 100644
index 0000000..9097b52
--- /dev/null
+++ b/org.eclipse.mdm.api.atfxadapter/src/test/resources/extref.txt
@@ -0,0 +1 @@
+This is a external reference file.
\ No newline at end of file
diff --git a/org.eclipse.mdm.api.atfxadapter/src/test/resources/openmdm.png b/org.eclipse.mdm.api.atfxadapter/src/test/resources/openmdm.png
new file mode 100644
index 0000000..437bb58
--- /dev/null
+++ b/org.eclipse.mdm.api.atfxadapter/src/test/resources/openmdm.png
Binary files differ
diff --git a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/EntityHolder.java b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/EntityHolder.java
index a7b8eef..f35c17c 100644
--- a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/EntityHolder.java
+++ b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/EntityHolder.java
@@ -136,4 +136,8 @@
return true;
}
+ @Override
+ public String toString() {
+ return String.format("%s.%s.%s", getEntity().getSourceName(), getEntity().getTypeName(), getEntity().getID());
+ }
}
diff --git a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/ImportTask.java b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/ImportTask.java
index ee1c96e..444195c 100644
--- a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/ImportTask.java
+++ b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/ImportTask.java
@@ -464,6 +464,7 @@
testStepSrc.getName(), templateTestStep.get().getName());
testStepDst = entityFactoryDst.createTestStep(testDst, templateTestStep.get(),
classificationUtil.getClassification(rootProjectName));
+ testStepDst.setName(testStepSrc.getName());
} else if (templateTestStep.isPresent()) {
LOG.trace("Importing TestStep '{}' using TestStepTemplate '{}' and create context roots",
testStepSrc.getName(), templateTestStep.get().getName());
@@ -471,7 +472,7 @@
classificationUtil.getClassification(rootProjectName));
} else {
LOG.trace("Importing TestStep '{}' using no TestStepTemplate", testStepSrc.getName());
- testStepDst = entityFactoryDst.createTestStep(testSrc.getName(), testDst,
+ testStepDst = entityFactoryDst.createTestStep(testStepSrc.getName(), testDst,
classificationUtil.getClassification(rootProjectName));
}
} else {
diff --git a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/TransferBase.java b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/TransferBase.java
index 3ef6751..f931eb4 100644
--- a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/TransferBase.java
+++ b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/control/TransferBase.java
@@ -191,15 +191,23 @@
if (!ignoredAttributes.contains(key) && valueNamesDst.contains(key)) {
Value valueSrc = me.getValue();
- if (onlyValid && valueSrc.isValid()) {
- if (isFileLinkDataType(valueSrc.getValueType())) {
- uploadFiles(srcEntity, dstEntity, valueSrc);
- }
-
- Value value = dstEntity.getValue(me.getKey());
- value.set(valueSrc.extract());
- value.setValid(valueSrc.isValid());
+ if (onlyValid && !valueSrc.isValid()) {
+ continue;
}
+
+ if (isFileLinkDataType(valueSrc.getValueType())) {
+ uploadFiles(srcEntity, dstEntity, valueSrc);
+ }
+
+ Value value = dstEntity.getValue(me.getKey());
+ try {
+ value.set(valueSrc.extract());
+ } catch (IllegalArgumentException e) {
+ throw new ApiCopyException(
+ "Cannot set value for " + dstEntity.getName() + "." + me.getKey() + ": " + e.getMessage(),
+ e);
+ }
+ value.setValid(valueSrc.isValid());
}
}