X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.objmap2%2Fsrc%2Forg%2Fsimantics%2Fobjmap%2Fgraph%2Fimpl%2FMapping.java;h=4820dae016b44c358fe52206d876f25a66b42fe3;hp=c2ecdf1b1679fe7f9fd5bd21ed9a0cef090ea63d;hb=d5db319fc2c400a8c76249e1ed7ffd9deb9f7609;hpb=6838557ccc94ba62e167fe3da59e04629f5cf9f6 diff --git a/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/impl/Mapping.java b/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/impl/Mapping.java index c2ecdf1b1..4820dae01 100644 --- a/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/impl/Mapping.java +++ b/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/impl/Mapping.java @@ -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 @@ -79,7 +78,7 @@ public class Mapping implements IMapping { link.type = type; link.domainElement = domainElement; domain.put(domainElement, link); - type.createDomain(g, new RangeToDomain(g), domainElement, link.rangeElement); + type.createDomain(g, new RangeToDomain(), domainElement, link.rangeElement); // TODO Should we do this only if the mapping is listening? domainModified(link); @@ -92,7 +91,7 @@ public class Mapping implements IMapping { link.type = type; link.rangeElement = rangeElement; range.put(rangeElement, link); - type.createRange(g, new DomainToRange(g), link.domainElement, rangeElement); + type.createRange(g, new DomainToRange(), link.domainElement, rangeElement); } Set domainSet = new AbstractSet() { @@ -173,10 +172,7 @@ public class Mapping implements IMapping { class DomainToRange implements IForwardMapping { - ReadGraph g; - - public DomainToRange(ReadGraph g) { - this.g = g; + public DomainToRange() { } @Override @@ -197,10 +193,10 @@ public class Mapping implements IMapping { link.domainModified = true; modifiedDomainLinks.add(link); domain.put(element, link); - createRange(g, link); + createRange(graph, link); } else if(link.type == null) - createRange(g, link); + createRange(graph, link); return link.rangeElement; } @@ -213,12 +209,10 @@ public class Mapping implements IMapping { class RangeToDomain extends DomainToRange implements IBackwardMapping { - WriteGraph g; - - public RangeToDomain(WriteGraph g) { - super(g); - this.g = g; + public RangeToDomain() { + super(); } + @Override public Domain inverseGet(Range element) { @@ -237,10 +231,10 @@ public class Mapping implements IMapping { link.rangeModified = true; modifiedRangeLinks.add(link); range.put(element, link); - createDomain(g, link); + createDomain(graph, link); } else if(link.type == null) - createDomain(g, link); + createDomain(graph, link); return link.domainElement; } @@ -265,7 +259,7 @@ public class Mapping implements IMapping { @Override public synchronized Collection updateDomain(WriteGraph g) throws MappingException { LOGGER.trace("Mapping.updateDomain"); - RangeToDomain map = new RangeToDomain(g); + RangeToDomain map = new RangeToDomain(); ArrayList updated = new ArrayList(); while(!modifiedRangeLinks.isEmpty()) { LOGGER.trace(" modifiedRangeLinks.size() = " + modifiedRangeLinks.size()); @@ -293,7 +287,7 @@ public class Mapping implements IMapping { @Override public synchronized Collection updateRange(ReadGraph g) throws MappingException { LOGGER.trace("Mapping.updateRange"); - DomainToRange map = new DomainToRange(g); + DomainToRange map = new DomainToRange(); ArrayList updated = new ArrayList(); while(!modifiedDomainLinks.isEmpty()) { LOGGER.trace(" modifiedDomainLinks.size() = " + modifiedDomainLinks.size()); @@ -311,13 +305,15 @@ public class Mapping implements IMapping { if(listensDomain) { RangeUpdateRequest request = new RangeUpdateRequest(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))