]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.procore/src/org/simantics/db/procore/cluster/ResourceTable.java
Multiple reader thread support for db client
[simantics/platform.git] / bundles / org.simantics.db.procore / src / org / simantics / db / procore / cluster / ResourceTable.java
index 84090af415e944ce757687706c2b7f67d646f71d..d0619976d4775421d4bd5b915d4dbe23b6063081 100644 (file)
@@ -33,7 +33,8 @@ import org.simantics.db.impl.TableFactory;
 import org.simantics.db.impl.TableSizeListener;
 import org.simantics.db.impl.graph.ReadGraphImpl;
 import org.simantics.db.procedure.AsyncContextMultiProcedure;
-import org.simantics.db.procedure.AsyncMultiProcedure;
+import org.simantics.db.procedure.SyncContextMultiProcedure;
+import org.simantics.db.procedure.SyncMultiProcedure;
 import org.simantics.db.procore.cluster.PredicateTable.Status;
 
 
@@ -413,7 +414,7 @@ final class ResourceElement {
     }
     
     public static void foreachObject(long[] table, int index,
-               final ReadGraphImpl graph, final AsyncMultiProcedure<Resource> procedure,
+               final ReadGraphImpl graph, final SyncMultiProcedure<Resource> procedure,
                final ClusterSupport support, final int pRef, final ClusterI.CompleteTypeEnum pCompleteType, CompleteTable ct, final Modifier modifier)
     throws DatabaseException {
         if (DEBUG)
@@ -506,7 +507,7 @@ final class ResourceElement {
     }
 
     public static <C> void foreachObject(long[] table, int index,
-               final ReadGraphImpl graph, final C context, final AsyncContextMultiProcedure<C, Resource> procedure,
+               final ReadGraphImpl graph, final C context, final SyncContextMultiProcedure<C, Resource> procedure,
                final ClusterSupport support, final int pRef, final ClusterI.CompleteTypeEnum pCompleteType, CompleteTable ct, final Modifier modifier)
     throws DatabaseException {
         if (DEBUG)
@@ -514,7 +515,7 @@ final class ResourceElement {
         if (ClusterI.CompleteTypeEnum.NotComplete != pCompleteType) {
             int completeRef = getCompleteObjectRef(table, index);
             if (0 == completeRef) {
-                       procedure.finished(graph);
+                       procedure.finished(graph, context);
 //                     graph.state.dec(0);
                 return; // no objects for given complete type
             }
@@ -543,14 +544,14 @@ final class ResourceElement {
                 ForeachObject t = new ForeachObject();
                 // CompleteRef is complete object set index.
                 ct.foreachComplete(completeRef, t, null, support, modifier);
-                procedure.finished(graph);
+                procedure.finished(graph, context);
 //                graph.state.dec(0);
                 return; // loop finished
             }
             // one complete type element
             ClusterI.CompleteTypeEnum completeType = ClusterTraits.completeReferenceGetType(completeRef);
             if (pCompleteType != completeType) {
-                       procedure.finished(graph);
+                       procedure.finished(graph, context);
 //                     graph.state.dec(0);
                 return;
             }
@@ -562,7 +563,7 @@ final class ResourceElement {
                 int externalRef = ClusterTraits.createForeignReference(clusterIndex, resourceIndex);
                 procedure.execute(graph, context, new ResourceImpl(graph.getResourceSupport(), modifier.execute(externalRef)));
             }
-               procedure.finished(graph);
+               procedure.finished(graph, context);
 //             graph.state.dec(0);
             return; // loop finished
         }
@@ -570,7 +571,7 @@ final class ResourceElement {
         long l = table[i];
         int p1 = (int) (l >>> 32);
         if (0 == p1) {
-               procedure.finished(graph);
+               procedure.finished(graph, context);
 //             graph.state.dec(0);
             return; // loop finished, no statements
         }
@@ -588,13 +589,13 @@ final class ResourceElement {
         long l2 = table[++i];
         int p2 = (int) (l2 >>> 32);
         if (pRef != p2) {
-               procedure.finished(graph);
+               procedure.finished(graph, context);
 //             graph.state.dec(0);
             return; // loop finished, one statements
         }
         int o2 = (int)l2;
         procedure.execute(graph, context, new ResourceImpl(graph.getResourceSupport(), modifier.execute(o2)));
-               procedure.finished(graph);
+               procedure.finished(graph, context);
 //             graph.state.dec(0);
     }
     
@@ -1021,14 +1022,14 @@ public final class ResourceTable extends Table<long[]> {
     }
 
     public void foreachObject(int resourceIndex, ReadGraphImpl graph,
-               AsyncMultiProcedure<Resource> procedure, ClusterSupport support, int pRef, ClusterI.CompleteTypeEnum pCompleteType, CompleteTable ct, Modifier modifier) throws DatabaseException {
+               SyncMultiProcedure<Resource> procedure, ClusterSupport support, int pRef, ClusterI.CompleteTypeEnum pCompleteType, CompleteTable ct, Modifier modifier) throws DatabaseException {
         int realIndex = checkIndexAndGetRealIndex(resourceIndex);
         ResourceElement.foreachObject(table, realIndex, graph, procedure, support,
                        pRef, pCompleteType, ct, modifier);
     }
 
     public <C> void foreachObject(int resourceIndex, ReadGraphImpl graph, C context,
-               AsyncContextMultiProcedure<C, Resource> procedure, ClusterSupport support, int pRef, ClusterI.CompleteTypeEnum pCompleteType, CompleteTable ct, Modifier modifier) throws DatabaseException {
+               SyncContextMultiProcedure<C, Resource> procedure, ClusterSupport support, int pRef, ClusterI.CompleteTypeEnum pCompleteType, CompleteTable ct, Modifier modifier) throws DatabaseException {
         int realIndex = checkIndexAndGetRealIndex(resourceIndex);
         ResourceElement.foreachObject(table, realIndex, graph, context, procedure, support,
                        pRef, pCompleteType, ct, modifier);