1 package org.simantics.document.server.request;
3 import java.util.Collection;
4 import java.util.Collections;
5 import java.util.HashSet;
8 import org.simantics.db.AsyncReadGraph;
9 import org.simantics.db.ReadGraph;
10 import org.simantics.db.common.request.UnaryAsyncRead;
11 import org.simantics.db.exception.DatabaseException;
12 import org.simantics.db.layer0.request.VariableChildren;
13 import org.simantics.db.layer0.request.VariableRead;
14 import org.simantics.db.layer0.variable.Variable;
15 import org.simantics.db.procedure.AsyncProcedure;
16 import org.simantics.structural.stubs.StructuralResource2;
17 import org.simantics.utils.threads.logger.ITask;
18 import org.simantics.utils.threads.logger.ThreadLogger;
20 public class NodesRequest extends VariableRead<Set<Variable>> {
22 public NodesRequest(Variable var) {
26 static class CollectNodesRequest2 extends UnaryAsyncRead<Collection<Variable>, Set<Variable>> {
28 public CollectNodesRequest2(Collection<Variable> nodes) {
33 public void perform(AsyncReadGraph graph, AsyncProcedure<Set<Variable>> procedure) {
34 HashSet<Variable> rs = new HashSet<Variable>(); // result
36 for(Variable node : parameter) {
37 graph.asyncRequest(new NodesRequest2(node), new AsyncProcedure<Set<Variable>> () {
40 public void execute(AsyncReadGraph graph, Set<Variable> result) {
47 public void exception(AsyncReadGraph graph, Throwable throwable) {
53 procedure.execute(graph, rs);
60 public Set<Variable> perform(ReadGraph graph) throws DatabaseException {
62 ITask task = DocumentRequest.PROFILE ? ThreadLogger.task(this) : null;
64 StructuralResource2.getInstance(graph);
66 return Collections.emptySet();
68 Collection<Variable> children = graph.syncRequest(new VariableChildren(variable));
70 Set<Variable> nodes = graph.syncRequest(new CollectNodesRequest2(children));
72 if(DocumentRequest.PROFILE) task.finish();