]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.issues.common/src/org/simantics/issues/common/MaxIssueSeverityRecursive.java
Multiple readers in db client
[simantics/platform.git] / bundles / org.simantics.issues.common / src / org / simantics / issues / common / MaxIssueSeverityRecursive.java
index db537ee26ac6d4ed826773b39deb81bc122307fe..ed3d6c2b97f66c97d7e40a050c0699e9152b2f84 100644 (file)
  *******************************************************************************/
 package org.simantics.issues.common;
 
+import java.util.Collection;
 import java.util.Set;
 
-import org.simantics.db.AsyncReadGraph;
+import org.simantics.db.ReadGraph;
 import org.simantics.db.Resource;
-import org.simantics.db.common.request.TernaryAsyncRead;
-import org.simantics.db.procedure.AsyncMultiProcedure;
-import org.simantics.db.procedure.AsyncProcedure;
+import org.simantics.db.common.request.TernaryRead;
+import org.simantics.db.exception.DatabaseException;
 import org.simantics.issues.Severity;
 import org.simantics.issues.ontology.IssueResource;
 
 /**
  * @author Tuukka Lehtonen
  */
-public class MaxIssueSeverityRecursive extends TernaryAsyncRead<Resource, Resource, Set<Resource>, Severity> {
+public class MaxIssueSeverityRecursive extends TernaryRead<Resource, Resource, Set<Resource>, Severity> {
 
     public MaxIssueSeverityRecursive(Resource resource, Resource childRelation, Set<Resource> typesToRecurse) {
         super(resource, childRelation, typesToRecurse);
     }
-
-//    @Override
-//    public Severity perform(ReadGraph graph) throws DatabaseException {
-//        Layer0 L0 = Layer0.getInstance(graph);
-//        IssueResource ISSUE = IssueResource.getInstance(graph);
-//        //System.out.println("severity: " + NameUtils.getSafeName(graph, resource));
-//        Collection<Resource> issues = graph.getObjects(resource, ISSUE.IsIssueContextOf);
-//        if (issues.isEmpty()) {
-//            // This content does not have directly attached issues, try to look
-//            // for some in the child components.
-//            return graph.syncRequest(new ChildMaxIssueSeverity(resource, L0.ConsistsOf));
-//        }
-//
-//        Severity maxSeverity = graph.syncRequest(new MaxIssueSeveritySingle(resource));
-//        if (maxSeverity == null)
-//            maxSeverity = graph.syncRequest(new ChildMaxIssueSeverity(resource, L0.ConsistsOf));
-//
-//        return maxSeverity;
-//    }
-
+    
     @Override
-    public void perform(AsyncReadGraph graph, final AsyncProcedure<Severity> procedure) {
+    public Severity perform(ReadGraph graph) throws DatabaseException {
+
         IssueResource ISSUE = graph.getService(IssueResource.class);
-        //System.out.println(getClass().getSimpleName() + ": " + parameter);
 
-        graph.forEachObject(parameter, ISSUE.Issue_HasContext_Inverse, new AsyncMultiProcedure<Resource>() {
-            volatile int issues = 0;
-            @Override
-            public void execute(AsyncReadGraph graph, Resource result) {
-                ++issues;
-            }
-            @Override
-            public void finished(AsyncReadGraph graph) {
-                if (issues == 0) {
-                    // This content does not have directly attached issues, try to look
-                    // for some in the child components.
-                    graph.asyncRequest(new ChildMaxIssueSeverity(parameter, parameter2, parameter3), procedure);
-                } else {
-                    // Try local issues first
-                    graph.asyncRequest(new MaxIssueSeveritySingle(parameter), new AsyncProcedure<Severity>() {
-                        @Override
-                        public void execute(AsyncReadGraph graph, Severity maxSeverity) {
-                            if (maxSeverity == null)
-                                // No severity for local issues, try children next.
-                                graph.asyncRequest(new ChildMaxIssueSeverity(parameter, parameter2, parameter3), procedure);
-                            else
-                                procedure.execute(graph, maxSeverity);
-                        }
-                        @Override
-                        public void exception(AsyncReadGraph graph, Throwable throwable) {
-                            procedure.exception(graph, throwable);
-                        }
-                    });
-                }
-            }
-            @Override
-            public void exception(AsyncReadGraph graph, Throwable throwable) {
-                procedure.exception(graph, throwable);
-            }
-        });
+        Collection<Resource> inv = graph.getObjects(parameter, ISSUE.Issue_HasContext_Inverse);
+        Collection<Resource> inv2 = graph.getObjects(parameter, ISSUE.Issue_ContextList_Element_Inverse);
+        if(inv.isEmpty() && inv2.isEmpty()) {
+            return graph.syncRequest(new ChildMaxIssueSeverity(parameter, parameter2, parameter3));
+        }
+        
+        Severity max = graph.syncRequest(new MaxIssueSeveritySingle(parameter));
+        if(max != null)
+            return max;
+        else
+            return graph.syncRequest(new ChildMaxIssueSeverity(parameter, parameter2, parameter3));
+            
     }
 
 }