--- /dev/null
+package org.simantics.document.server.request;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.simantics.databoard.Bindings;\r
+import org.simantics.databoard.Databoard;\r
+import org.simantics.databoard.binding.Binding;\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.db.layer0.request.VariableRead;\r
+import org.simantics.db.layer0.variable.Variable;\r
+import org.simantics.document.base.ontology.DocumentationResource;\r
+import org.simantics.document.server.DocumentServerUtils;\r
+import org.simantics.document.server.JSONObject;\r
+import org.simantics.layer0.Layer0;\r
+import org.simantics.structural.stubs.StructuralResource2;\r
+\r
+class NodeRequestStatic extends VariableRead<JSONObject> {\r
+\r
+ public NodeRequestStatic(Variable node) {\r
+ super(node);\r
+ }\r
+\r
+ public static class Headers extends VariableRead<JSONObject> {\r
+\r
+ public Headers(Variable variable) {\r
+ super(variable);\r
+ }\r
+\r
+ @Override\r
+ public JSONObject perform(ReadGraph graph) throws DatabaseException {\r
+\r
+ Layer0 L0 = Layer0.getInstance(graph);\r
+ StructuralResource2.getInstance(graph);\r
+ DocumentationResource DOC = DocumentationResource.getInstance(graph);\r
+\r
+ String id = DocumentServerUtils.getId(graph, variable);\r
+ \r
+ Binding jsonBinding = graph.getService(Databoard.class).getBindingUnchecked(JSONObject.class);\r
+ JSONObject object = new JSONObject(jsonBinding, id);\r
+\r
+ Resource type = variable.getType(graph);\r
+\r
+ Variable parentConnectionPoint = DocumentServerUtils.getParentConnectionPoint(graph, variable);\r
+ while (parentConnectionPoint != null) {\r
+ Variable par = parentConnectionPoint.getParent(graph);\r
+ if(!DOC.Components_DummyContainer.equals(par.getType(graph))) break;\r
+ parentConnectionPoint = DocumentServerUtils.getParentConnectionPoint(graph, par);\r
+ }\r
+ \r
+ if(parentConnectionPoint != null) {\r
+ String parent = DocumentServerUtils.getId(graph, parentConnectionPoint.getParent(graph));\r
+ Resource cpPredicate = parentConnectionPoint.getPossiblePredicateResource(graph);\r
+ String i = null;\r
+ if (DOC.Relations_partN.equals(cpPredicate)) {\r
+ i = DocumentServerUtils.findManualOrdinal(graph, variable);\r
+ } else {\r
+ i = graph.getPossibleRelatedValue(cpPredicate, DOC.Document_ChildRelation_ordinal, Bindings.STRING);\r
+ }\r
+ if (i == null) {\r
+ i = "0";\r
+ }\r
+ \r
+ object.addJSONField("parent", parent);\r
+ object.addJSONField("parentOrd", i);\r
+ } else {\r
+ if(DOC.Components_Root.equals(type) || graph.isInheritedFrom(type, DOC.Components_Root)) {\r
+ object.addJSONField("parent", "root");\r
+ object.addJSONField("parentOrd", "0");\r
+ } if(!graph.isInheritedFrom(type, DOC.Components_ParentlessComponent)) {\r
+ object.addJSONField("parent", "");\r
+ object.addJSONField("parentOrd", "0");\r
+ }\r
+ }\r
+\r
+ object.addJSONField("id", id);\r
+ object.addJSONField("type", graph.<String>getRelatedValue(type, L0.HasName, Bindings.STRING));\r
+ return object;\r
+ \r
+ }\r
+ \r
+ }\r
+ \r
+ @Override\r
+ public JSONObject perform(ReadGraph graph) throws DatabaseException {\r
+\r
+ long s = System.nanoTime();\r
+\r
+ JSONObject base = graph.syncRequest(new Headers(variable));\r
+ JSONObject object = base.clone();\r
+ \r
+ DocumentationResource DOC = DocumentationResource.getInstance(graph);\r
+ \r
+ for(Variable attrib : DocumentServerUtils.getStaticAttributes(graph, DOC, variable)) {\r
+ String name = attrib.getName(graph);\r
+ try {\r
+ Object value = DocumentServerUtils.getValue(graph, attrib);\r
+ object.addJSONField(name, value);\r
+ } catch (Throwable t) {\r
+ List<String> errorList = object.getJSONField(NodeRequest.ERRORS);\r
+ if(errorList == null)\r
+ errorList = new ArrayList<String>();\r
+ \r
+ String errorMessage = NodeRequestUtils.formatErrorMessage(name, t);\r
+ \r
+ errorList.add(errorMessage);\r
+ object.addJSONField(NodeRequest.ERRORS, errorList);\r
+ }\r
+\r
+ }\r
+\r
+ if(DocumentRequest.PROFILE) {\r
+ long dura = System.nanoTime()-s;\r
+ System.err.println("NodeRequestStatic " + System.identityHashCode(this) + " " + variable.getURI(graph) + " in " + 1e-6*dura + "ms." + object);\r
+ }\r
+ \r
+ return object;\r
+\r
+ } \r
+\r
+}
\ No newline at end of file