]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/adapter/impl/EntityInstances.java
Sync git svn branch with SVN repository r33389.
[simantics/platform.git] / bundles / org.simantics.db.layer0 / src / org / simantics / db / layer0 / adapter / impl / EntityInstances.java
index b0d71503b192f1e7249717c43791864afeb271f6..7717f04483de9be3e55953be82c6f4f8189328be 100644 (file)
@@ -11,8 +11,6 @@
  *******************************************************************************/\r
 package org.simantics.db.layer0.adapter.impl;\r
 \r
-import gnu.trove.set.hash.THashSet;\r
-\r
 import java.util.ArrayList;\r
 import java.util.Collection;\r
 import java.util.Collections;\r
@@ -30,11 +28,15 @@ import org.simantics.db.exception.DatabaseException;
 import org.simantics.db.layer0.adapter.Instances;\r
 import org.simantics.db.layer0.genericrelation.IndexQueries;\r
 import org.simantics.db.layer0.util.Layer0Utils;\r
+import org.simantics.db.request.ReadExt;\r
+import org.simantics.db.request.RequestFlags;\r
 import org.simantics.db.service.CollectionSupport;\r
 import org.simantics.layer0.Layer0;\r
 import org.simantics.operation.Layer0X;\r
 import org.simantics.scl.runtime.function.Function;\r
 \r
+import gnu.trove.set.hash.THashSet;\r
+\r
 /**\r
  * @author Antti Villberg\r
  * @author Tuukka Lehtonen\r
@@ -58,7 +60,7 @@ public class EntityInstances implements Instances {
      * A (cacheable) query to optimize single index queries for immutable\r
      * indexes such as ontologies.\r
      */\r
-    public static class QueryIndex extends TernaryRead<Resource, Resource, String, List<Resource>> {\r
+    public static class QueryIndex extends TernaryRead<Resource, Resource, String, List<Resource>> implements ReadExt {\r
 \r
         public QueryIndex(Resource index, Resource type, String filter) {\r
             super(index, type, filter);\r
@@ -125,6 +127,17 @@ public class EntityInstances implements Instances {
                return "QueryIndex " + parameter + " " + parameter2 + " " + parameter3;\r
         }\r
 \r
+               @Override\r
+               public boolean isImmutable(ReadGraph graph) throws DatabaseException {\r
+                       // TODO Auto-generated method stub\r
+                       return false;\r
+               }\r
+\r
+               @Override\r
+               public int getType() {\r
+                       return RequestFlags.IMMEDIATE_UPDATE;\r
+               }\r
+\r
     }\r
 \r
     private List<Resource> findRec(ReadGraph graph, Resource index, String filter, Set<Resource> visited) throws DatabaseException {\r
@@ -161,8 +174,10 @@ public class EntityInstances implements Instances {
     public Collection<Resource> find(ReadGraph graph, Resource index, String filter) throws DatabaseException {\r
        CollectionSupport coll = graph.getService(CollectionSupport.class);\r
        \r
-       List<Resource> rec = findRec(graph, index, filter, new THashSet<Resource>());\r
+       THashSet<Resource> visited = new THashSet<>();\r
+       List<Resource> rec = findRec(graph, index, filter, visited);\r
        for(Resource global : Layer0Utils.listGlobalOntologies(graph)) {\r
+               if (!visited.add(global)) continue;\r
                List<Resource> rs = graph.syncRequest(new QueryIndex(global, type, filter), TransientCacheListener.<List<Resource>>instance());\r
                if(rec.isEmpty() && !rs.isEmpty()) {\r
                        // TODO: rec could be an immutable empty list\r