X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.issues.common%2Fsrc%2Forg%2Fsimantics%2Fissues%2Fcommon%2FDependencyIssueSynchronizer2.java;h=e31d5027e18cc605a12487716227bdd08f723be9;hb=0d9b90834ce56b292c00b1a39850ed842c3e4d42;hp=ed7932139b0fe9373e342ec274913b8c4892d718;hpb=969bd23cab98a79ca9101af33334000879fb60c5;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.issues.common/src/org/simantics/issues/common/DependencyIssueSynchronizer2.java b/bundles/org.simantics.issues.common/src/org/simantics/issues/common/DependencyIssueSynchronizer2.java index ed7932139..e31d5027e 100644 --- a/bundles/org.simantics.issues.common/src/org/simantics/issues/common/DependencyIssueSynchronizer2.java +++ b/bundles/org.simantics.issues.common/src/org/simantics/issues/common/DependencyIssueSynchronizer2.java @@ -1,67 +1,70 @@ -package org.simantics.issues.common; - -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; - -import org.simantics.db.Issue; -import org.simantics.db.Resource; -import org.simantics.db.WriteGraph; -import org.simantics.db.common.procedure.adapter.TransientCacheListener; -import org.simantics.db.common.request.WriteRequest; -import org.simantics.db.exception.DatabaseException; -import org.simantics.db.layer0.util.RemoverUtil; -import org.simantics.issues.common.DependencyIssueValidator2.Contexts; -import org.simantics.issues.common.DependencyIssueValidator2.DependencyIssueDescriptions; -import org.simantics.issues.ontology.IssueResource; -import org.simantics.layer0.Layer0; - -public class DependencyIssueSynchronizer2 extends WriteRequest { - - public static final boolean DEBUG = false; - - private Resource resource; - private Resource source; - - public DependencyIssueSynchronizer2(Resource resource, Resource source) { - this.resource = resource; - this.source = source; - } - - @Override - public void perform(WriteGraph graph) throws DatabaseException { - - if(DEBUG) System.err.println("Running DependencySynchronizer for " + resource); - - Set existing = graph.syncRequest(new DependencyIssueDescriptions(source, resource), TransientCacheListener.>instance()); - Set contexts = Collections.emptySet(); - - if(graph.hasStatement(resource)) { - contexts = graph.syncRequest(new Contexts(source, resource), TransientCacheListener.>instance()); - } - - if(!existing.equals(contexts)) { - - Set added = new HashSet(contexts); - Set removed = new HashSet(existing); - added.removeAll(existing); - removed.removeAll(contexts); - - for(Issue add : added) { - add.write(graph, source); - } - for(Issue remove : removed) { - Resource issue = graph.sync(new IssueByList(source, remove)); - if (issue == null) - // FIXME: when can this happen and what should be done in this case? - continue; - graph.deny(issue, Layer0.getInstance(graph).PartOf); - graph.deny(source, IssueResource.getInstance(graph).IssueSource_Manages, issue); - RemoverUtil.remove(graph, issue); - } - - } - - } - +package org.simantics.issues.common; + +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + +import org.simantics.db.Issue; +import org.simantics.db.Resource; +import org.simantics.db.WriteGraph; +import org.simantics.db.common.procedure.adapter.TransientCacheListener; +import org.simantics.db.common.request.WriteRequest; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.util.RemoverUtil; +import org.simantics.issues.common.DependencyIssueValidator2.Contexts; +import org.simantics.issues.common.DependencyIssueValidator2.DependencyIssueDescriptions; +import org.simantics.issues.ontology.IssueResource; +import org.simantics.layer0.Layer0; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class DependencyIssueSynchronizer2 extends WriteRequest { + + private static final Logger LOGGER = LoggerFactory.getLogger(DependencyIssueSynchronizer2.class); + public static final boolean DEBUG = false; + + private Resource resource; + private Resource source; + + public DependencyIssueSynchronizer2(Resource resource, Resource source) { + this.resource = resource; + this.source = source; + } + + @Override + public void perform(WriteGraph graph) throws DatabaseException { + + if(DEBUG) LOGGER.info("Running DependencySynchronizer for " + resource); + + Set existing = graph.syncRequest(new DependencyIssueDescriptions(source, resource), TransientCacheListener.>instance()); + Set contexts = Collections.emptySet(); + + if(graph.hasStatement(resource)) { + contexts = graph.syncRequest(new Contexts(source, resource), TransientCacheListener.>instance()); + } + + if(!existing.equals(contexts)) { + + Set added = new HashSet(contexts); + Set removed = new HashSet(existing); + added.removeAll(existing); + removed.removeAll(contexts); + + for(Issue add : added) { + add.write(graph, source); + } + for(Issue remove : removed) { + Resource issue = graph.sync(new IssueByList(source, remove)); + if (issue == null) + // FIXME: when can this happen and what should be done in this case? + continue; + graph.deny(issue, Layer0.getInstance(graph).PartOf); + graph.deny(source, IssueResource.getInstance(graph).IssueSource_Manages, issue); + RemoverUtil.remove(graph, issue); + } + + } + + } + } \ No newline at end of file