]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/request/IndexedInstances.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.db.layer0 / src / org / simantics / db / layer0 / request / IndexedInstances.java
1 package org.simantics.db.layer0.request;\r
2 \r
3 import java.util.Collection;\r
4 import java.util.Collections;\r
5 import java.util.HashSet;\r
6 import java.util.Map;\r
7 import java.util.Set;\r
8 \r
9 import org.simantics.db.ReadGraph;\r
10 import org.simantics.db.Resource;\r
11 import org.simantics.db.common.request.ResourceRead2;\r
12 import org.simantics.db.exception.DatabaseException;\r
13 import org.simantics.layer0.Layer0;\r
14 import org.simantics.operation.Layer0X;\r
15 import org.simantics.scl.runtime.function.Function;\r
16 \r
17 public class IndexedInstances extends ResourceRead2<Set<Resource>> {\r
18 \r
19         public IndexedInstances(Resource type, Resource indexRoot) {\r
20                 super(type, indexRoot);\r
21         }\r
22 \r
23         @Override\r
24         public Set<Resource> perform(ReadGraph graph) throws DatabaseException {\r
25                 \r
26         Layer0 L0 = Layer0.getInstance(graph);\r
27         Layer0X L0X = Layer0X.getInstance(graph);\r
28 \r
29         String typeName = graph.getRelatedValue(resource, L0.HasName);\r
30 \r
31         Function dependencies = graph.adapt(L0X.Dependencies, Function.class);\r
32         \r
33         Collection<Map<String, Object>> results = (Collection<Map<String, Object>>)dependencies.apply(graph, resource2, "Types:*" + typeName);\r
34         if (results == null)\r
35             return Collections.emptySet();\r
36 \r
37         HashSet<Resource> result = new HashSet<Resource>(results.size());\r
38         for(Map<String, Object> entry : results) {\r
39             Resource res = (Resource)entry.get("Resource");\r
40             if(res != null) {\r
41                 if (graph.isInstanceOf(res, resource))\r
42                         result.add(res);\r
43             }\r
44         }\r
45         return result;\r
46                 \r
47         }\r
48 \r
49 }\r