1 package org.simantics.document.server.request;
\r
3 import gnu.trove.map.hash.THashMap;
\r
5 import java.util.ArrayList;
\r
6 import java.util.Collection;
\r
7 import java.util.Collections;
\r
8 import java.util.List;
\r
9 import java.util.Map;
\r
11 import org.simantics.db.ReadGraph;
\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.base.ontology.DocumentationResource;
\r
16 import org.simantics.document.server.DocumentServerUtils;
\r
17 import org.simantics.structural.stubs.StructuralResource2;
\r
19 class NodeRequestDynamic extends VariableRead<Map<String,Object>> {
\r
21 public NodeRequestDynamic(Variable node) {
\r
26 public Map<String,Object> perform(ReadGraph graph) throws DatabaseException {
\r
28 long s = System.nanoTime();
\r
30 StructuralResource2.getInstance(graph);
\r
31 DocumentationResource DOC = DocumentationResource.getInstance(graph);
\r
33 Collection<Variable> attributes = DocumentServerUtils.getDynamicAttributes(graph, DOC, variable);
\r
34 if(attributes.isEmpty()) return Collections.emptyMap();
\r
36 Map<String,Object> result = new THashMap<String,Object>();
\r
37 for(Variable attrib : attributes) {
\r
38 String name = attrib.getName(graph);
\r
40 Object value = DocumentServerUtils.getValue(graph, attrib);
\r
41 result.put(name, value);
\r
42 } catch (Throwable t) {
\r
43 @SuppressWarnings("unchecked")
\r
44 List<String> errorList = (List<String>) result.get(NodeRequest.ERRORS);
\r
45 if(errorList == null)
\r
46 errorList = new ArrayList<String>();
\r
48 String errorMessage = NodeRequestUtils.formatErrorMessage(name, t);
\r
50 errorList.add(errorMessage);
\r
51 result.put(NodeRequest.ERRORS, errorList);
\r
56 if(DocumentRequest.PROFILE) {
\r
57 long dura = System.nanoTime()-s;
\r
58 System.err.println("NodeRequestDynamic " + System.identityHashCode(this) + " " + variable.getURI(graph) + " in " + 1e-6*dura + "ms." + result);
\r