]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.document.server/src/org/simantics/document/server/Functions.java
Multiple readers and variable optimization
[simantics/platform.git] / bundles / org.simantics.document.server / src / org / simantics / document / server / Functions.java
index 66cc0047c3389fe4e559486c76f8eb52bf50a8ab..0e56a7dd2569f5e9ef8efa1cbef0e2eac1ebf52d 100644 (file)
@@ -25,7 +25,7 @@ import org.simantics.db.Statement;
 import org.simantics.db.WriteGraph;
 import org.simantics.db.common.primitiverequest.Adapter;
 import org.simantics.db.common.procedure.adapter.TransientCacheListener;
-import org.simantics.db.common.request.UnaryRead;
+import org.simantics.db.common.request.BinaryRead;
 import org.simantics.db.common.request.UniqueRead;
 import org.simantics.db.common.request.WriteResultRequest;
 import org.simantics.db.common.utils.Logger;
@@ -1254,11 +1254,11 @@ public class Functions {
                                                return true;
                                        }
                                } else {
-                                       Variable parentCp = graph.sync(new UnaryRead<Connection, Variable>(conn) {
+                                       Variable parentCp = graph.sync(new BinaryRead<Variable, Connection, Variable>(widget, conn) {
                                    @Override
                                    public Variable perform(ReadGraph graph) throws DatabaseException {
                                        DocumentationResource DOC = DocumentationResource.getInstance(graph);
-                                       Collection<VariableConnectionPointDescriptor> descs = parameter.getConnectionPointDescriptors(graph, null);
+                                       Collection<VariableConnectionPointDescriptor> descs = parameter2.getConnectionPointDescriptors(graph, parameter, null);
 
                                                for(VariableConnectionPointDescriptor desc : descs) {
                                                        if (DOC.Relations_partN.equals(desc.getConnectionPointResource(graph))) {
@@ -1310,5 +1310,33 @@ public class Functions {
             LOGGER.debug("", e);
         return e.getMessage();
     }
+    
+    static class StandardDocumentProperties implements DocumentProperties {
+
+               @Override
+               public Collection<String> getKeys(ReadGraph graph, Variable context) throws DatabaseException {
+                       
+               DocumentationResource DOC = DocumentationResource.getInstance(graph);
+                       StandardGraphPropertyVariable asd = new StandardGraphPropertyVariable(graph, context, DOC.Properties_primitiveProperties);
+                       Map<String, Variable> ps = primitiveProperties.getVariables(graph, asd, null);
+                       return ps.keySet();
+                       
+               }
+
+               @Override
+               public Object getValue(ReadGraph graph, Variable context, String key) throws DatabaseException {
+                       
+               DocumentationResource DOC = DocumentationResource.getInstance(graph);
+                       StandardGraphPropertyVariable asd = new StandardGraphPropertyVariable(graph, context, DOC.Properties_primitiveProperties);
+                       Map<String, Variable> ps = primitiveProperties.getVariables(graph, asd, null);
+                       return ps.get(key).getValue(graph);
+                       
+               }
+       
+    }
+    
+    public static DocumentProperties primitiveProperties() throws DatabaseException {
+       return new StandardDocumentProperties();
+    }
 
 }
\ No newline at end of file