1 package org.simantics.db.layer0.request;
\r
3 import java.util.Collection;
\r
4 import java.util.Collections;
\r
5 import java.util.HashMap;
\r
6 import java.util.Map;
\r
8 import org.simantics.databoard.Bindings;
\r
9 import org.simantics.db.ReadGraph;
\r
10 import org.simantics.db.Resource;
\r
11 import org.simantics.db.common.request.PossibleIndexRoot;
\r
12 import org.simantics.db.common.request.ResourceRead2;
\r
13 import org.simantics.db.exception.DatabaseException;
\r
14 import org.simantics.db.layer0.adapter.Instances;
\r
15 import org.simantics.layer0.Layer0;
\r
16 import org.simantics.simulation.ontology.SimulationResource;
\r
19 * Returns a Name->Resource map for instances of given type in a given model.
\r
21 * Uses Dependencies-index for obtaining instances. Uses L0.HasName for
\r
24 * @author Antti Villberg
\r
26 public class ModelInstances extends ResourceRead2<Map<String, Resource>> {
\r
29 * @parameter modelPart is a Resource with URI under a model e.g. model can
\r
30 * be found using L0.PartOf
\r
31 * @parameter type is the type to search instances for. The query returns
\r
32 * properly all instances of all subtypes.
\r
34 public ModelInstances(Resource modelPart, Resource type) {
\r
35 super(modelPart, type);
\r
38 private Resource getModel(ReadGraph graph) throws DatabaseException {
\r
39 SimulationResource SIMU = SimulationResource.getInstance(graph);
\r
40 if (graph.isInstanceOf(resource, SIMU.Model)) {
\r
43 return graph.sync(new PossibleIndexRoot(resource));
\r
48 public Map<String, Resource> perform(ReadGraph graph) throws DatabaseException {
\r
50 Layer0 L0 = Layer0.getInstance(graph);
\r
52 Instances query = graph.adapt(resource2, Instances.class);
\r
54 return Collections.emptyMap();
\r
56 Resource model = getModel(graph);
\r
58 return Collections.emptyMap();
\r
59 Collection<Resource> queryResult = query.find(graph, model);
\r
60 if (queryResult.isEmpty())
\r
61 return Collections.emptyMap();
\r
63 Map<String, Resource> result = new HashMap<String, Resource>(queryResult.size());
\r
64 for(Resource instance : queryResult) {
\r
65 String name = graph.getRelatedValue(instance, L0.HasName, Bindings.STRING);
\r
66 result.put(name, instance);
\r