]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/impl/Mapping.java
Thread safety changes in objmap2
[simantics/platform.git] / bundles / org.simantics.objmap2 / src / org / simantics / objmap / graph / impl / Mapping.java
index 1589e94326ef2be74755dbd1e114895bdc111ca1..4820dae016b44c358fe52206d876f25a66b42fe3 100644 (file)
@@ -12,8 +12,6 @@
 package org.simantics.objmap.graph.impl;
 
 
-import gnu.trove.map.hash.THashMap;
-
 import java.util.AbstractSet;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -21,12 +19,9 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.simantics.db.ReadGraph;
 import org.simantics.db.WriteGraph;
 import org.simantics.db.exception.DatabaseException;
-
 import org.simantics.objmap.backward.IBackwardMapping;
 import org.simantics.objmap.exceptions.MappingException;
 import org.simantics.objmap.forward.IForwardMapping;
@@ -34,6 +29,10 @@ import org.simantics.objmap.graph.IMapping;
 import org.simantics.objmap.graph.IMappingListener;
 import org.simantics.objmap.graph.schema.ILinkType;
 import org.simantics.objmap.graph.schema.IMappingSchema;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import gnu.trove.map.hash.THashMap;
 
 /**
  * An implementation of IMapping. The class should not be created
@@ -306,13 +305,15 @@ public class Mapping<Domain, Range> implements IMapping<Domain, Range> {
                        
                        if(listensDomain) {
                            RangeUpdateRequest<Domain,Range> request = new RangeUpdateRequest<Domain,Range>(link, map, this);
+                           boolean changes;
                            try {
-                    g.syncRequest(request, request);
+                               changes = g.syncRequest(request, request) > 0;
                 } catch (DatabaseException e) {
                     throw new MappingException(e);
                 }
-                           // TODO check if really modified
-                           updated.add(link.rangeElement);
+                           
+                           if (changes)
+                               updated.add(link.rangeElement);
                        }
                        else
                            if(link.type.updateRange(g, map, link.domainElement, link.rangeElement))