]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.document.server/src/org/simantics/document/server/request/NodesRequest.java
Still working for multiple readers
[simantics/platform.git] / bundles / org.simantics.document.server / src / org / simantics / document / server / request / NodesRequest.java
1 package org.simantics.document.server.request;
2
3 import gnu.trove.set.hash.THashSet;
4
5 import java.util.Collection;
6 import java.util.Collections;
7 import java.util.Set;
8
9 import org.simantics.db.ReadGraph;
10 import org.simantics.db.exception.DatabaseException;
11 import org.simantics.db.layer0.request.VariableChildren;
12 import org.simantics.db.layer0.request.VariableRead;
13 import org.simantics.db.layer0.variable.Variable;
14 import org.simantics.structural.stubs.StructuralResource2;
15
16 public class NodesRequest extends VariableRead<Set<Variable>> {
17
18         public static boolean PROFILE = false;
19
20     public NodesRequest(Variable var) {
21         super(var);
22         }
23
24         @Override
25         public Set<Variable> perform(ReadGraph graph) throws DatabaseException {
26
27                 long s = System.nanoTime();
28                 
29                 StructuralResource2.getInstance(graph);
30                 if(variable == null)
31                         return Collections.emptySet();
32                 
33                 Set<Variable> nodes = new THashSet<Variable>();
34                 Collection<Variable> children = graph.syncRequest(new VariableChildren(variable));
35                 for(Variable child : children) {
36                         Set<Variable> childNodes = graph.syncRequest(new NodesRequest2(child));
37                         nodes.addAll(childNodes);
38                 }
39                 
40         if(PROFILE) {
41                 long dura = System.nanoTime()-s;
42                 System.err.println("NodesRequest " + System.identityHashCode(this) + " in " + 1e-6*dura + "ms. " + variable.getURI(graph));
43         }
44                 
45                 return nodes;
46
47         }
48
49 }