]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.document.server/src/org/simantics/document/server/request/NodeRequestStatic.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.document.server / src / org / simantics / document / server / request / NodeRequestStatic.java
diff --git a/bundles/org.simantics.document.server/src/org/simantics/document/server/request/NodeRequestStatic.java b/bundles/org.simantics.document.server/src/org/simantics/document/server/request/NodeRequestStatic.java
new file mode 100644 (file)
index 0000000..1bb6531
--- /dev/null
@@ -0,0 +1,123 @@
+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