1 package org.simantics.document.server.request;
\r
3 import java.util.ArrayList;
\r
4 import java.util.List;
\r
6 import org.simantics.databoard.Bindings;
\r
7 import org.simantics.databoard.Databoard;
\r
8 import org.simantics.databoard.binding.Binding;
\r
9 import org.simantics.db.ReadGraph;
\r
10 import org.simantics.db.Resource;
\r
11 import org.simantics.db.exception.DatabaseException;
\r
12 import org.simantics.db.layer0.request.VariableRead;
\r
13 import org.simantics.db.layer0.variable.Variable;
\r
14 import org.simantics.document.base.ontology.DocumentationResource;
\r
15 import org.simantics.document.server.DocumentServerUtils;
\r
16 import org.simantics.document.server.JSONObject;
\r
17 import org.simantics.layer0.Layer0;
\r
18 import org.simantics.structural.stubs.StructuralResource2;
\r
20 class NodeRequestStatic extends VariableRead<JSONObject> {
\r
22 public NodeRequestStatic(Variable node) {
\r
26 public static class Headers extends VariableRead<JSONObject> {
\r
28 public Headers(Variable variable) {
\r
33 public JSONObject perform(ReadGraph graph) throws DatabaseException {
\r
35 Layer0 L0 = Layer0.getInstance(graph);
\r
36 StructuralResource2.getInstance(graph);
\r
37 DocumentationResource DOC = DocumentationResource.getInstance(graph);
\r
39 String id = DocumentServerUtils.getId(graph, variable);
\r
41 Binding jsonBinding = graph.getService(Databoard.class).getBindingUnchecked(JSONObject.class);
\r
42 JSONObject object = new JSONObject(jsonBinding, id);
\r
44 Resource type = variable.getType(graph);
\r
46 Variable parentConnectionPoint = DocumentServerUtils.getParentConnectionPoint(graph, variable);
\r
47 while (parentConnectionPoint != null) {
\r
48 Variable par = parentConnectionPoint.getParent(graph);
\r
49 if(!DOC.Components_DummyContainer.equals(par.getType(graph))) break;
\r
50 parentConnectionPoint = DocumentServerUtils.getParentConnectionPoint(graph, par);
\r
53 if(parentConnectionPoint != null) {
\r
54 String parent = DocumentServerUtils.getId(graph, parentConnectionPoint.getParent(graph));
\r
55 Resource cpPredicate = parentConnectionPoint.getPossiblePredicateResource(graph);
\r
57 if (DOC.Relations_partN.equals(cpPredicate)) {
\r
58 i = DocumentServerUtils.findManualOrdinal(graph, variable);
\r
60 i = graph.getPossibleRelatedValue(cpPredicate, DOC.Document_ChildRelation_ordinal, Bindings.STRING);
\r
66 object.addJSONField("parent", parent);
\r
67 object.addJSONField("parentOrd", i);
\r
69 if(DOC.Components_Root.equals(type) || graph.isInheritedFrom(type, DOC.Components_Root)) {
\r
70 object.addJSONField("parent", "root");
\r
71 object.addJSONField("parentOrd", "0");
\r
72 } if(!graph.isInheritedFrom(type, DOC.Components_ParentlessComponent)) {
\r
73 object.addJSONField("parent", "");
\r
74 object.addJSONField("parentOrd", "0");
\r
78 object.addJSONField("id", id);
\r
79 object.addJSONField("type", graph.<String>getRelatedValue(type, L0.HasName, Bindings.STRING));
\r
87 public JSONObject perform(ReadGraph graph) throws DatabaseException {
\r
89 long s = System.nanoTime();
\r
91 JSONObject base = graph.syncRequest(new Headers(variable));
\r
92 JSONObject object = base.clone();
\r
94 DocumentationResource DOC = DocumentationResource.getInstance(graph);
\r
96 for(Variable attrib : DocumentServerUtils.getStaticAttributes(graph, DOC, variable)) {
\r
97 String name = attrib.getName(graph);
\r
99 Object value = DocumentServerUtils.getValue(graph, attrib);
\r
100 object.addJSONField(name, value);
\r
101 } catch (Throwable t) {
\r
102 List<String> errorList = object.getJSONField(NodeRequest.ERRORS);
\r
103 if(errorList == null)
\r
104 errorList = new ArrayList<String>();
\r
106 String errorMessage = NodeRequestUtils.formatErrorMessage(name, t);
\r
108 errorList.add(errorMessage);
\r
109 object.addJSONField(NodeRequest.ERRORS, errorList);
\r
114 if(DocumentRequest.PROFILE) {
\r
115 long dura = System.nanoTime()-s;
\r
116 System.err.println("NodeRequestStatic " + System.identityHashCode(this) + " " + variable.getURI(graph) + " in " + 1e-6*dura + "ms." + object);
\r