]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/request/combinations/Combinators.java
Multiple reader thread support for db client
[simantics/platform.git] / bundles / org.simantics.db.layer0 / src / org / simantics / db / layer0 / request / combinations / Combinators.java
index bd2409f5d9b2eecde6a5f369562a141365938adb..1eea49e26d466cf582e79bdd0b0245afd9bc96cb 100644 (file)
@@ -17,9 +17,10 @@ import java.util.Map;
 import org.simantics.db.ReadGraph;
 import org.simantics.db.Resource;
 import org.simantics.db.common.request.ParametrizedRead;
+import org.simantics.db.common.request.ResourceRead;
 import org.simantics.db.exception.DatabaseException;
-import org.simantics.db.procedure.AsyncMultiProcedure;
 import org.simantics.db.procedure.Procedure;
+import org.simantics.db.procedure.SyncMultiProcedure;
 import org.simantics.db.request.MultiRead;
 import org.simantics.db.request.Read;
 import org.simantics.layer0.Layer0;
@@ -41,9 +42,11 @@ public class Combinators {
                }
                @Override
                public void perform(ReadGraph graph,
-                               AsyncMultiProcedure<Resource> callback)
+                               SyncMultiProcedure<Resource> callback)
                                throws DatabaseException {
-                       graph.forEachObject(subject, relation, callback);
+                       for(Resource object : graph.getObjects(subject, relation)) {
+                               callback.execute(graph, object);
+                       }
                }               
            @Override
            public int hashCode() {
@@ -138,9 +141,7 @@ public class Combinators {
                }
                @Override
                public Resource perform(ReadGraph graph) throws DatabaseException {
-                       SynchronizationProcedure<Resource> procedure = new SynchronizationProcedure<Resource>();
-                       graph.forPossibleObject(subject, relation, procedure);
-                       return procedure.getResult();
+                       return graph.getPossibleObject(subject, relation);
                }       
            @Override
            public int hashCode() {
@@ -204,9 +205,7 @@ public class Combinators {
                }
                @Override
                public Resource perform(ReadGraph graph) throws DatabaseException {
-                       SynchronizationProcedure<Resource> procedure = new SynchronizationProcedure<Resource>();
-                       graph.forSingleObject(subject, relation, procedure);
-                       return procedure.getResult();
+                       return graph.getSingleObject(subject, relation);
                }       
            @Override
            public int hashCode() {
@@ -327,7 +326,7 @@ public class Combinators {
                        this.f = f;
                        this.g = g;
                }
-               public void perform(ReadGraph graph, final AsyncMultiProcedure<Y> callback)     throws DatabaseException {
+               public void perform(ReadGraph graph, final SyncMultiProcedure<Y> callback)      throws DatabaseException {
                    try {
                                for(X x : graph.syncRequest(g))
                                        callback.execute(graph, graph.syncRequest(f.get(x)));
@@ -410,7 +409,7 @@ public class Combinators {
                        this.g = g;
                }
                @Override
-               public void perform(ReadGraph graph, AsyncMultiProcedure<Y> callback)
+               public void perform(ReadGraph graph, SyncMultiProcedure<Y> callback)
                                throws DatabaseException {
                        graph.syncRequest(f.get(graph.syncRequest(g)), callback);
                }
@@ -469,7 +468,7 @@ public class Combinators {
                        this.f = f;
                        this.g = g;
                }
-               public void perform(ReadGraph graph, final AsyncMultiProcedure<Y> callback)     throws DatabaseException {
+               public void perform(ReadGraph graph, final SyncMultiProcedure<Y> callback)      throws DatabaseException {
                    try {
                                for(X x : graph.syncRequest(g))
                                        for(Y y : graph.syncRequest(f.get(x)))
@@ -614,7 +613,7 @@ public class Combinators {
                        this.value = value;
                }
                @Override
-               public void perform(ReadGraph graph, AsyncMultiProcedure<T> callback)
+               public void perform(ReadGraph graph, SyncMultiProcedure<T> callback)
                                throws DatabaseException {
                        callback.execute(graph, value);
                        callback.finished(graph);
@@ -640,29 +639,18 @@ public class Combinators {
        
        // ------------------------------------------------------------------------
        
-       private static class Name implements Read<String> {
-               Resource resource;
+       private static class Name extends ResourceRead<String> {
+               
                public Name(Resource resource) {
-                       this.resource = resource;
+                       super(resource);
                }
+               
                @Override
                public String perform(ReadGraph graph) throws DatabaseException {
                Layer0 L0 = Layer0.getInstance(graph);
-                       SynchronizationProcedure<String> procedure = new SynchronizationProcedure<String>();
-                       graph.forRelatedValue(resource, L0.HasName, procedure);
-                       return procedure.getResult();
+               return graph.getRelatedValue(resource, L0.HasName);
                }
-           @Override
-           public int hashCode() {
-               return getClass().hashCode() + 31 * resource.hashCode();
-           }
-               @Override
-               public boolean equals(Object obj) {
-                       if(obj == this) return true;
-                       if(obj == null || obj.getClass() != getClass()) return false;
-                       Name other = (Name)obj;
-                       return resource.equals(other.resource);
-               }               
+               
        }       
        public static Read<String> name(Resource resource) {
                return new Name(resource);