1 package org.simantics.document.server.request;
\r
3 import java.util.ArrayList;
\r
4 import java.util.Collections;
\r
5 import java.util.Comparator;
\r
6 import java.util.HashSet;
\r
7 import java.util.List;
\r
8 import java.util.Set;
\r
10 import org.simantics.db.ReadGraph;
\r
11 import org.simantics.db.common.procedure.adapter.TransientCacheAsyncListener;
\r
12 import org.simantics.db.exception.DatabaseException;
\r
13 import org.simantics.db.layer0.request.VariableRead;
\r
14 import org.simantics.db.layer0.variable.Variable;
\r
15 import org.simantics.document.server.JSONObject;
\r
17 public class DocumentRequest extends VariableRead<List<JSONObject>> {
\r
19 public static boolean PROFILE = false;
\r
21 public DocumentRequest(Variable var) {
\r
26 public List<JSONObject> perform(ReadGraph graph) throws DatabaseException {
\r
28 long s = System.nanoTime();
\r
30 Set<Variable> nodes = graph.syncRequest(new NodesRequest(variable), TransientCacheAsyncListener.<Set<Variable>>instance());
\r
31 HashSet<JSONObject> rs = new HashSet<JSONObject>(); // result
\r
32 if(nodes.isEmpty()) {
\r
33 return Collections.emptyList();
\r
37 /*TreeMap<String, Variable> nodeMap = new TreeMap<String, Variable>();
\r
39 for (Variable node : nodes) {
\r
40 nodeMap.put(node.getURI(graph), node);
\r
42 System.out.println("*************************************************************************");
\r
43 for (Variable node : nodeMap.values()) {
\r
44 System.out.println(" " + node.getURI(graph));
\r
47 for(Variable node : nodes) {
\r
48 rs.add(graph.syncRequest(new NodeRequest(node), TransientCacheAsyncListener.<JSONObject>instance()));
\r
51 ArrayList<JSONObject> result = new ArrayList<JSONObject>(rs);
\r
52 Collections.sort(result, new Comparator<JSONObject>() {
\r
55 public int compare(JSONObject o1, JSONObject o2) {
\r
56 return o1.id.compareTo(o2.id);
\r
62 long dura = System.nanoTime()-s;
\r
63 System.err.println("DocumentRequest " + System.identityHashCode(this) + " " + variable.getURI(graph) + " in " + 1e-6*dura + "ms.");
\r