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=9f048f7752b1a900a1730eae5242d53519d21a8b;hb=d5db319fc2c400a8c76249e1ed7ffd9deb9f7609;hpb=aefd2e1032b23c86b153be48bcdfee9f8b4dd126 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 9f048f775..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 @@ -73,13 +72,13 @@ public class Mapping implements IMapping { } private void createDomain(WriteGraph g, Link link) throws MappingException { - LOGGER.info(" createDomain for " + link.rangeElement); + LOGGER.trace(" createDomain for " + link.rangeElement); ILinkType type = schema.linkTypeOfRangeElement(link.rangeElement); Domain domainElement = type.createDomainElement(g, link.rangeElement); 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; } @@ -264,11 +258,11 @@ public class Mapping implements IMapping { @Override public synchronized Collection updateDomain(WriteGraph g) throws MappingException { - LOGGER.info("Mapping.updateDomain"); - RangeToDomain map = new RangeToDomain(g); + LOGGER.trace("Mapping.updateDomain"); + RangeToDomain map = new RangeToDomain(); ArrayList updated = new ArrayList(); while(!modifiedRangeLinks.isEmpty()) { - LOGGER.info(" modifiedRangeLinks.size() = " + modifiedRangeLinks.size()); + LOGGER.trace(" modifiedRangeLinks.size() = " + modifiedRangeLinks.size()); Link link = modifiedRangeLinks.remove(modifiedRangeLinks.size()-1); link.rangeModified = false; @@ -280,9 +274,10 @@ public class Mapping implements IMapping { if(link.type == null) { createDomain(g, link); } - - if(link.type.updateDomain(g, map, link.domainElement, link.rangeElement)) - updated.add(link.domainElement); + else { + if(link.type.updateDomain(g, map, link.domainElement, link.rangeElement)) + updated.add(link.domainElement); + } } if (listensDomain) updateRange(g); //FIXME: without this listening would stop. @@ -291,11 +286,11 @@ public class Mapping implements IMapping { @Override public synchronized Collection updateRange(ReadGraph g) throws MappingException { - LOGGER.info("Mapping.updateRange"); - DomainToRange map = new DomainToRange(g); + LOGGER.trace("Mapping.updateRange"); + DomainToRange map = new DomainToRange(); ArrayList updated = new ArrayList(); while(!modifiedDomainLinks.isEmpty()) { - LOGGER.info(" modifiedDomainLinks.size() = " + modifiedDomainLinks.size()); + LOGGER.trace(" modifiedDomainLinks.size() = " + modifiedDomainLinks.size()); Link link = modifiedDomainLinks.remove(modifiedDomainLinks.size()-1); link.domainModified = false; @@ -310,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)) @@ -358,7 +355,7 @@ public class Mapping implements IMapping { void domainModified(Link link) { if(!link.domainModified) { synchronized(modifiedDomainLinks) { - LOGGER.info(" domainModified for " + link.rangeElement); + LOGGER.trace(" domainModified for " + link.rangeElement); link.domainModified = true; modifiedDomainLinks.add(link); if(modifiedDomainLinks.size() == 1) {