Only create new ContextRoots of a Measurement.

Signed-off-by: Martin Fleischer <m.fleischer@peak-solution.de>
diff --git a/src/main/java/org/eclipse/mdm/api/odsadapter/transaction/ODSTransaction.java b/src/main/java/org/eclipse/mdm/api/odsadapter/transaction/ODSTransaction.java
index a4bf4b9..c9f7d3a 100644
--- a/src/main/java/org/eclipse/mdm/api/odsadapter/transaction/ODSTransaction.java
+++ b/src/main/java/org/eclipse/mdm/api/odsadapter/transaction/ODSTransaction.java
@@ -15,43 +15,43 @@
 
 package org.eclipse.mdm.api.odsadapter.transaction;
 
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.UUID;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-
-import org.asam.ods.AoException;
-import org.eclipse.mdm.api.base.Transaction;
-import org.eclipse.mdm.api.base.adapter.Core;
-import org.eclipse.mdm.api.base.adapter.EntityType;
-import org.eclipse.mdm.api.base.massdata.WriteRequest;
-import org.eclipse.mdm.api.base.model.Channel;
-import org.eclipse.mdm.api.base.model.ContextRoot;
-import org.eclipse.mdm.api.base.model.Deletable;
-import org.eclipse.mdm.api.base.model.Entity;
-import org.eclipse.mdm.api.base.model.FileLink;
-import org.eclipse.mdm.api.base.model.Measurement;
-import org.eclipse.mdm.api.base.model.ScalarType;
-import org.eclipse.mdm.api.base.model.TestStep;
-import org.eclipse.mdm.api.base.model.Value;
-import org.eclipse.mdm.api.base.model.ValueType;
-import org.eclipse.mdm.api.base.query.DataAccessException;
-import org.eclipse.mdm.api.dflt.model.CatalogAttribute;
-import org.eclipse.mdm.api.dflt.model.CatalogComponent;
-import org.eclipse.mdm.api.dflt.model.CatalogSensor;
-import org.eclipse.mdm.api.dflt.model.TemplateAttribute;
-import org.eclipse.mdm.api.odsadapter.ODSContext;
-import org.eclipse.mdm.api.odsadapter.filetransfer.Transfer;
-import org.eclipse.mdm.api.odsadapter.query.ODSModelManager;
-import org.eclipse.mdm.api.odsadapter.utils.ODSUtils;
-import org.slf4j.Logger;
+import java.io.IOException;

+import java.util.ArrayList;

+import java.util.Collection;

+import java.util.HashSet;

+import java.util.List;

+import java.util.Map;

+import java.util.Map.Entry;

+import java.util.Set;

+import java.util.UUID;

+import java.util.function.Function;

+import java.util.stream.Collectors;

+

+import org.asam.ods.AoException;

+import org.eclipse.mdm.api.base.Transaction;

+import org.eclipse.mdm.api.base.adapter.Core;

+import org.eclipse.mdm.api.base.adapter.EntityType;

+import org.eclipse.mdm.api.base.massdata.WriteRequest;

+import org.eclipse.mdm.api.base.model.Channel;

+import org.eclipse.mdm.api.base.model.ContextRoot;

+import org.eclipse.mdm.api.base.model.Deletable;

+import org.eclipse.mdm.api.base.model.Entity;

+import org.eclipse.mdm.api.base.model.FileLink;

+import org.eclipse.mdm.api.base.model.Measurement;

+import org.eclipse.mdm.api.base.model.ScalarType;

+import org.eclipse.mdm.api.base.model.TestStep;

+import org.eclipse.mdm.api.base.model.Value;

+import org.eclipse.mdm.api.base.model.ValueType;

+import org.eclipse.mdm.api.base.query.DataAccessException;

+import org.eclipse.mdm.api.dflt.model.CatalogAttribute;

+import org.eclipse.mdm.api.dflt.model.CatalogComponent;

+import org.eclipse.mdm.api.dflt.model.CatalogSensor;

+import org.eclipse.mdm.api.dflt.model.TemplateAttribute;

+import org.eclipse.mdm.api.odsadapter.ODSContext;

+import org.eclipse.mdm.api.odsadapter.filetransfer.Transfer;

+import org.eclipse.mdm.api.odsadapter.query.ODSModelManager;

+import org.eclipse.mdm.api.odsadapter.utils.ODSUtils;

+import org.slf4j.Logger;

 import org.slf4j.LoggerFactory;
 
 /**
@@ -169,10 +169,12 @@
 			}
 
 			List<Measurement> measurements = (List<Measurement>) entitiesByClassType.get(Measurement.class);
-			if (measurements != null) {
-				// use set here, since measurement sibling point to the same
-				// context roots
-				create(measurements.stream().map(ContextRoot::of).collect(HashSet::new, Set::addAll, Set::addAll));
+			if (measurements != null) {

+				// Use set here, since measurement siblings point to the same

+				// context roots. Only create those ContextRoots that haven't been created yet:

+				create(measurements.stream().map(ContextRoot::of)

+						.collect(HashSet<ContextRoot>::new, Set<ContextRoot>::addAll, Set<ContextRoot>::addAll)

+						.stream().filter(cr -> !ODSUtils.isValidID(cr.getID())).collect(Collectors.toSet()));
 			}
 
 			executeStatements(et -> new InsertStatement(this, et), entities);