1 package org.simantics.db.layer0.request;
\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
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
17 public class IndexedInstances extends ResourceRead2<Set<Resource>> {
\r
19 public IndexedInstances(Resource type, Resource indexRoot) {
\r
20 super(type, indexRoot);
\r
24 public Set<Resource> perform(ReadGraph graph) throws DatabaseException {
\r
26 Layer0 L0 = Layer0.getInstance(graph);
\r
27 Layer0X L0X = Layer0X.getInstance(graph);
\r
29 String typeName = graph.getRelatedValue(resource, L0.HasName);
\r
31 Function dependencies = graph.adapt(L0X.Dependencies, Function.class);
\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
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
41 if (graph.isInstanceOf(res, resource))
\r