]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.document.server/src/org/simantics/document/server/request/NodeRequestStatic.java
Utilize slf4j
[simantics/platform.git] / bundles / org.simantics.document.server / src / org / simantics / document / server / request / NodeRequestStatic.java
1 package org.simantics.document.server.request;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.List;\r
5 \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
19 \r
20 class NodeRequestStatic extends VariableRead<JSONObject> {\r
21 \r
22         public NodeRequestStatic(Variable node) {\r
23                 super(node);\r
24         }\r
25 \r
26         public static class Headers extends VariableRead<JSONObject> {\r
27 \r
28                 public Headers(Variable variable) {\r
29                         super(variable);\r
30                 }\r
31 \r
32                 @Override\r
33                 public JSONObject perform(ReadGraph graph) throws DatabaseException {\r
34 \r
35                         Layer0 L0 = Layer0.getInstance(graph);\r
36                         StructuralResource2.getInstance(graph);\r
37                         DocumentationResource DOC = DocumentationResource.getInstance(graph);\r
38 \r
39                         String id = DocumentServerUtils.getId(graph, variable);\r
40                         \r
41                         Binding jsonBinding = graph.getService(Databoard.class).getBindingUnchecked(JSONObject.class);\r
42                         JSONObject object = new JSONObject(jsonBinding, id);\r
43 \r
44                         Resource type = variable.getType(graph);\r
45 \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
51                         }\r
52                         \r
53                         if(parentConnectionPoint != null) {\r
54                                 String parent = DocumentServerUtils.getId(graph, parentConnectionPoint.getParent(graph));\r
55                                 Resource cpPredicate = parentConnectionPoint.getPossiblePredicateResource(graph);\r
56                                 String i = null;\r
57                                 if (DOC.Relations_partN.equals(cpPredicate)) {\r
58                                         i = DocumentServerUtils.findManualOrdinal(graph, variable);\r
59                                 } else {\r
60                                         i = graph.getPossibleRelatedValue(cpPredicate, DOC.Document_ChildRelation_ordinal, Bindings.STRING);\r
61                                 }\r
62                                 if (i == null) {\r
63                                         i = "0";\r
64                                 }\r
65                                 \r
66                                 object.addJSONField("parent", parent);\r
67                                 object.addJSONField("parentOrd", i);\r
68                         } else {\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
75                             }\r
76                         }\r
77 \r
78                         object.addJSONField("id", id);\r
79                         object.addJSONField("type", graph.<String>getRelatedValue(type, L0.HasName, Bindings.STRING));\r
80                         return object;\r
81                         \r
82                 }\r
83                 \r
84         }\r
85         \r
86         @Override\r
87         public JSONObject perform(ReadGraph graph) throws DatabaseException {\r
88 \r
89                 long s = System.nanoTime();\r
90 \r
91                 JSONObject base = graph.syncRequest(new Headers(variable));\r
92                 JSONObject object = base.clone();\r
93                 \r
94                 DocumentationResource DOC = DocumentationResource.getInstance(graph);\r
95                 \r
96                 for(Variable attrib : DocumentServerUtils.getStaticAttributes(graph, DOC, variable)) {\r
97                         String name = attrib.getName(graph);\r
98                         try {\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
105                             \r
106                     String errorMessage = NodeRequestUtils.formatErrorMessage(name, t);\r
107                     \r
108                             errorList.add(errorMessage);\r
109                             object.addJSONField(NodeRequest.ERRORS, errorList);\r
110                         }\r
111 \r
112                 }\r
113 \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
117         }\r
118                 \r
119                 return object;\r
120 \r
121         }               \r
122 \r
123 }