-package org.simantics.issues.common;\r
-\r
-import java.util.Collections;\r
-import java.util.HashSet;\r
-import java.util.List;\r
-import java.util.Set;\r
-\r
-import org.simantics.db.Issue;\r
-import org.simantics.db.ReadGraph;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.common.procedure.adapter.TransientCacheListener;\r
-import org.simantics.db.common.request.ResourceRead2;\r
-import org.simantics.db.common.request.ResourceRead3;\r
-import org.simantics.db.common.utils.Functions;\r
-import org.simantics.db.common.utils.NameUtils;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.issues.ontology.IssueResource;\r
-import org.simantics.layer0.Layer0;\r
-import org.slf4j.Logger;\r
-import org.slf4j.LoggerFactory;\r
-\r
-public class DependencyIssueValidator2 extends ResourceRead3<Boolean> {\r
- private static final Logger LOGGER = LoggerFactory.getLogger(DependencyIssueValidator2.class);\r
-\r
- public static final boolean DEBUG = false;\r
-\r
- public DependencyIssueValidator2(Resource resource, Resource model, Resource source) {\r
- super(resource, model, source);\r
- }\r
-\r
- static class DependencyIssueDescriptions extends ResourceRead2<Set<Issue>> {\r
-\r
- public DependencyIssueDescriptions(Resource source, Resource context0) {\r
- super(source, context0);\r
- }\r
- \r
- @Override\r
- public Set<Issue> perform(ReadGraph graph) throws DatabaseException {\r
- HashSet<Issue> result = new HashSet<Issue>();\r
- for(Resource issue : graph.syncRequest(new ManagedIssues(resource))) {\r
- Issue desc = graph.sync(new StandardIssueDescription(issue));\r
- if(desc == null) continue;\r
- if(resource2.equals(desc.getMainContext())) result.add(desc);\r
- }\r
- return result;\r
- }\r
- \r
- }\r
- \r
- static class Contexts extends ResourceRead2<Set<Issue>> {\r
-\r
- public Contexts(Resource source, Resource resource) {\r
- super(source, resource);\r
- }\r
- \r
- @Override\r
- public Set<Issue> perform(ReadGraph graph) throws DatabaseException {\r
- \r
- Layer0 L0 = Layer0.getInstance(graph);\r
- IssueResource IR = IssueResource.getInstance(graph);\r
-\r
- Resource constraint = graph.getSingleObject(resource, IR.Sources_DependencyTracker_HasConstraint);\r
- Resource function = graph.getSingleObject(constraint, L0.Constraint_Validator);\r
- try {\r
- @SuppressWarnings("unchecked")\r
- Set<Issue> contexts = new HashSet<Issue>((List<Issue>)Functions.exec(graph, function, graph, resource2));\r
- if(DEBUG) System.err.println("Validator found: " + contexts.size() + " issues (" + contexts + ")");\r
- return contexts;\r
- } catch (DatabaseException e) {\r
- LOGGER.error("Reading a constraint validator failed", e);\r
- return Collections.emptySet();\r
- }\r
- \r
- }\r
- \r
- @Override\r
- public String toString() {\r
- return "DependencyIssueValidators2$Contexts[resource=" + resource2 + " source=" + resource + "]";\r
- }\r
- \r
- }\r
-\r
- @Override\r
- public Boolean perform(ReadGraph graph) throws DatabaseException {\r
- \r
- if(DEBUG) System.err.println("Running DependencyValidator for " + NameUtils.getSafeName(graph, resource) + " " + NameUtils.getSafeName(graph, resource3));\r
-\r
- Set<Issue> existing = graph.syncRequest(new DependencyIssueDescriptions(resource3, resource), TransientCacheListener.<Set<Issue>>instance());\r
-\r
- if(DEBUG) System.err.println("Existing: " + existing.size() + " issues (" + existing + ")");\r
- \r
- // Removed resources do not have issues\r
- if(!graph.hasStatement(resource)) {\r
- if(DEBUG) System.err.println("No statements");\r
- return existing.isEmpty();\r
- }\r
-\r
- Set<Issue> contexts = graph.syncRequest(new Contexts(resource3, resource), TransientCacheListener.<Set<Issue>>instance());\r
-\r
- if(DEBUG) System.err.println("Current: " + contexts.size() + " issues (" + contexts + ")");\r
- \r
- return existing.equals(contexts);\r
-\r
- }\r
-\r
+package org.simantics.issues.common;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.simantics.db.Issue;
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.common.procedure.adapter.TransientCacheListener;
+import org.simantics.db.common.request.ResourceRead2;
+import org.simantics.db.common.request.ResourceRead3;
+import org.simantics.db.common.utils.Functions;
+import org.simantics.db.common.utils.NameUtils;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.issues.ontology.IssueResource;
+import org.simantics.layer0.Layer0;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DependencyIssueValidator2 extends ResourceRead3<Boolean> {
+ private static final Logger LOGGER = LoggerFactory.getLogger(DependencyIssueValidator2.class);
+
+ public static final boolean DEBUG = false;
+
+ public DependencyIssueValidator2(Resource resource, Resource model, Resource source) {
+ super(resource, model, source);
+ }
+
+ static class DependencyIssueDescriptions extends ResourceRead2<Set<Issue>> {
+
+ public DependencyIssueDescriptions(Resource source, Resource context0) {
+ super(source, context0);
+ }
+
+ @Override
+ public Set<Issue> perform(ReadGraph graph) throws DatabaseException {
+ HashSet<Issue> result = new HashSet<Issue>();
+ for(Resource issue : graph.syncRequest(new ManagedIssues(resource))) {
+ Issue desc = graph.sync(new StandardIssueDescription(issue));
+ if(desc == null) continue;
+ if(resource2.equals(desc.getMainContext())) result.add(desc);
+ }
+ return result;
+ }
+
+ }
+
+ static class Contexts extends ResourceRead2<Set<Issue>> {
+
+ public Contexts(Resource source, Resource resource) {
+ super(source, resource);
+ }
+
+ @Override
+ public Set<Issue> perform(ReadGraph graph) throws DatabaseException {
+
+ Layer0 L0 = Layer0.getInstance(graph);
+ IssueResource IR = IssueResource.getInstance(graph);
+
+ Resource constraint = graph.getSingleObject(resource, IR.Sources_DependencyTracker_HasConstraint);
+ Resource function = graph.getSingleObject(constraint, L0.Constraint_Validator);
+ try {
+ @SuppressWarnings("unchecked")
+ Set<Issue> contexts = new HashSet<Issue>((List<Issue>)Functions.exec(graph, function, graph, resource2));
+ if(DEBUG) LOGGER.info("Validator found: " + contexts.size() + " issues (" + contexts + ")");
+ return contexts;
+ } catch (DatabaseException e) {
+ LOGGER.error("Reading a constraint validator failed", e);
+ return Collections.emptySet();
+ }
+
+ }
+
+ @Override
+ public String toString() {
+ return "DependencyIssueValidators2$Contexts[resource=" + resource2 + " source=" + resource + "]";
+ }
+
+ }
+
+ @Override
+ public Boolean perform(ReadGraph graph) throws DatabaseException {
+
+ if(DEBUG) LOGGER.info("Running DependencyValidator for " + NameUtils.getSafeName(graph, resource) + " " + NameUtils.getSafeName(graph, resource3));
+
+ Set<Issue> existing = graph.syncRequest(new DependencyIssueDescriptions(resource3, resource), TransientCacheListener.<Set<Issue>>instance());
+
+ if(DEBUG) LOGGER.info("Existing: " + existing.size() + " issues (" + existing + ")");
+
+ // Removed resources do not have issues
+ if(!graph.hasStatement(resource)) {
+ if(DEBUG) LOGGER.info("No statements");
+ return existing.isEmpty();
+ }
+
+ Set<Issue> contexts = graph.syncRequest(new Contexts(resource3, resource), TransientCacheListener.<Set<Issue>>instance());
+
+ if(DEBUG) LOGGER.info("Current: " + contexts.size() + " issues (" + contexts + ")");
+
+ return existing.equals(contexts);
+
+ }
+
}
\ No newline at end of file