]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/MappedElementsRule.java
Thread safety changes in objmap2
[simantics/platform.git] / bundles / org.simantics.objmap2 / src / org / simantics / objmap / graph / rules / MappedElementsRule.java
index 7f3c13a106e956989fc4185353de667adad5f6e1..45fe7064111ad017022d9a8d90caedba7e01694f 100644 (file)
@@ -13,6 +13,7 @@ package org.simantics.objmap.graph.rules;
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Objects;
 
 import org.simantics.db.ReadGraph;
 import org.simantics.db.WriteGraph;
@@ -66,12 +67,25 @@ public class MappedElementsRule<Domain, Range> implements IBidirectionalMappingR
             Domain domainElement, Range rangeElement)
     throws MappingException {
         LOGGER.trace("    MappedElementsRule.updateRange");
-        Collection<Domain> value = domainAccessor.get(g, domainElement);
+        ArrayList<Range> mappedValue = getMappedValue(g, map, domainElement);
+        return rangeAccessor.set(rangeElement, mappedValue);
+    }
+    
+    @Override
+    public boolean checkChanges(ReadGraph g, IForwardMapping<Domain, Range> map, Domain domainElement, Range rangeElement) throws MappingException {
+        LOGGER.trace("    MappedElementsRule.updateRange");
+        ArrayList<Range> mappedValue = getMappedValue(g, map, domainElement);
+        return Objects.equals(mappedValue, rangeAccessor.get(rangeElement));
+    }
+
+       private ArrayList<Range> getMappedValue(ReadGraph g, IForwardMapping<Domain, Range> map, Domain domainElement)
+                       throws MappingException {
+               Collection<Domain> value = domainAccessor.get(g, domainElement);
         ArrayList<Range> mappedValue = new ArrayList<Range>(value.size());
         for(Domain r : value)
             mappedValue.add(map.map(g, r));//map.get(r));
-        return rangeAccessor.set(rangeElement, mappedValue);
-    }
+               return mappedValue;
+       }
     
     public void createDomain(WriteGraph g, IBackwardMapping<Domain,Range> map, Domain domainElement, Range rangeElement) throws MappingException {
        updateDomain(g, map, domainElement, rangeElement);