--- /dev/null
+package org.simantics.document.server;\r
+\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import org.simantics.databoard.adapter.AdaptException;\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.db.service.CollectionSupport;\r
+import org.simantics.document.base.ontology.DocumentationResource;\r
+import org.simantics.structural2.scl.StructuralComponent;\r
+\r
+public class VariableStructuralContext extends StructuralComponent<Variable> {\r
+\r
+ final private Variable selfVariable;\r
+ final private Variable variable;\r
+ final private DocumentationResource DOC;\r
+ \r
+ public VariableStructuralContext(ReadGraph graph, Variable selfVariable) throws DatabaseException {\r
+ this.selfVariable = selfVariable;\r
+ this.variable = selfVariable.getParent(graph).getParent(graph);\r
+ this.DOC = DocumentationResource.getInstance(graph);\r
+ }\r
+ \r
+ @Override\r
+ public Resource getType(ReadGraph g) throws DatabaseException {\r
+ throw new UnsupportedOperationException();\r
+ }\r
+ \r
+ static class MapRequest extends VariableRead<Map<Resource,Variable>> {\r
+\r
+ public MapRequest(Variable component) {\r
+ super(component);\r
+ }\r
+\r
+ @Override\r
+ public Map<Resource, Variable> perform(ReadGraph graph) throws DatabaseException {\r
+ \r
+ CollectionSupport cs = graph.getService(CollectionSupport.class);\r
+ Map<Resource, Variable> result = cs.createMap(Variable.class);\r
+ for(Variable property : variable.getProperties(graph)) {\r
+ Resource predicate = property.getPossiblePredicateResource(graph);\r
+ if(predicate != null)\r
+ result.put(predicate, property);\r
+ }\r
+ return result;\r
+ \r
+ }\r
+ \r
+ }\r
+\r
+ @Override\r
+ public Object getValue(ReadGraph g, Resource attribute, Binding binding) throws DatabaseException, AdaptException {\r
+ \r
+ Map<Resource,Variable> map = g.syncRequest(new MapRequest(variable));\r
+ Variable p = map.get(attribute);\r
+ if(p != null) {\r
+ if(binding != null)\r
+ return p.getValue(g, binding);\r
+ else\r
+ return p.getValue(g);\r
+ }\r
+ \r
+ return null;\r
+ \r
+ }\r
+\r
+ @Override\r
+ public boolean isParametrized(ReadGraph g) throws DatabaseException {\r
+ throw new UnsupportedOperationException();\r
+ }\r
+\r
+ @Override\r
+ public Variable getConnection(ReadGraph g, Resource connectionPoint) throws DatabaseException {\r
+ throw new UnsupportedOperationException();\r
+ }\r
+\r
+ @SuppressWarnings({ "unchecked", "rawtypes" })\r
+ @Override\r
+ public List getConnections(ReadGraph g, Resource connectionPoint) throws DatabaseException {\r
+ throw new UnsupportedOperationException();\r
+ }\r
+\r
+ @Override\r
+ public Resource getResource() {\r
+ throw new UnsupportedOperationException();\r
+ }\r
+\r
+ @Override\r
+ public StructuralComponent<Variable> getContext() {\r
+ return null;\r
+ }\r
+\r
+}\r