X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.acorn%2Fsrc%2Forg%2Fsimantics%2Facorn%2Fcluster%2FClusterBig.java;h=063bcf548fa27f687318a1e021fcae511f8bf668;hp=f623d587f8d745907a86edf18fd1977fb5bfc894;hb=0d9b90834ce56b292c00b1a39850ed842c3e4d42;hpb=05c3af4f97a49eed48a9d512f9581208af0fd5a8 diff --git a/bundles/org.simantics.acorn/src/org/simantics/acorn/cluster/ClusterBig.java b/bundles/org.simantics.acorn/src/org/simantics/acorn/cluster/ClusterBig.java index f623d587f..063bcf548 100644 --- a/bundles/org.simantics.acorn/src/org/simantics/acorn/cluster/ClusterBig.java +++ b/bundles/org.simantics.acorn/src/org/simantics/acorn/cluster/ClusterBig.java @@ -15,7 +15,10 @@ import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Arrays; +import java.util.function.Consumer; +import org.simantics.acorn.exception.AcornAccessVerificationException; +import org.simantics.acorn.exception.IllegalAcornStateException; import org.simantics.acorn.internal.ClusterChange; import org.simantics.acorn.internal.ClusterStream; import org.simantics.acorn.internal.ClusterSupport2; @@ -37,8 +40,8 @@ import org.simantics.db.impl.Table; import org.simantics.db.impl.TableHeader; import org.simantics.db.impl.graph.ReadGraphImpl; import org.simantics.db.impl.query.QueryProcessor; -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.ClusterMap; import org.simantics.db.procore.cluster.ClusterPrintDebugInfo; import org.simantics.db.procore.cluster.ClusterTraits; @@ -50,7 +53,8 @@ import org.simantics.db.procore.cluster.PredicateTable; import org.simantics.db.procore.cluster.ResourceTable; import org.simantics.db.procore.cluster.ValueTable; import org.simantics.db.service.ClusterUID; -import org.simantics.utils.datastructures.Callback; + +import fi.vtt.simantics.procore.internal.SessionImplSocket; final public class ClusterBig extends ClusterImpl { private static final int TABLE_HEADER_SIZE = TableHeader.HEADER_SIZE + TableHeader.EXTRA_SIZE; @@ -261,7 +265,7 @@ final public class ClusterBig extends ClusterImpl { return objectTable.getSingleObject(objectIndex, support, this); } - public void forObjects(int resourceKey, int predicateKey, int objectIndex, QueryProcessor processor, ReadGraphImpl graph, AsyncMultiProcedure procedure, + public void forObjects(int resourceKey, int predicateKey, int objectIndex, QueryProcessor processor, ReadGraphImpl graph, SyncMultiProcedure procedure, ClusterSupport support) throws DatabaseException { if (DEBUG) System.out.println("Cluster.forObjects1: rk=" + resourceKey + " pk=" + predicateKey); @@ -274,7 +278,7 @@ final public class ClusterBig extends ClusterImpl { } objectTable.foreachObject(graph, objectIndex, procedure, this); } - public void forObjects(int resourceKey, int predicateKey, int objectIndex, QueryProcessor processor, ReadGraphImpl graph, C context, AsyncContextMultiProcedure procedure, + public void forObjects(int resourceKey, int predicateKey, int objectIndex, QueryProcessor processor, ReadGraphImpl graph, C context, SyncContextMultiProcedure procedure, ClusterSupport support) throws DatabaseException { if (DEBUG) System.out.println("Cluster.forObjects1: rk=" + resourceKey + " pk=" + predicateKey); @@ -353,57 +357,53 @@ final public class ClusterBig extends ClusterImpl { @Override public void forObjects(ReadGraphImpl graph, int resourceKey, - int predicateKey, AsyncMultiProcedure procedure) + int predicateKey, SyncMultiProcedure procedure) throws DatabaseException { - throw new UnsupportedOperationException(); - -// SessionImplSocket session = (SessionImplSocket)graph.getSession(); -// ClusterSupport support = session.clusterTranslator; -// -// if (DEBUG) -// System.out.println("Cluster.forObjects3: rk=" + resourceKey + " pk=" + predicateKey); -// final int resourceIndex = getLocalReference(resourceKey); -// final int pRef = getInternalReferenceOrZero(predicateKey, support); -// final ClusterI.CompleteTypeEnum pCompleteType = ClusterTraitsBase.getCompleteTypeFromResourceKey(predicateKey); -// if (ClusterI.CompleteTypeEnum.NotComplete != pCompleteType) { -// resourceTable.foreachObject(resourceIndex, graph, procedure, support, pRef, pCompleteType, completeTable, this); -// return; -// } -// final int predicateIndex = resourceTable.getPredicateIndex(resourceIndex); -// if (0 == predicateIndex) { -// resourceTable.foreachObject(resourceIndex, graph, procedure, support, pRef, pCompleteType, completeTable, this); -// return; -// } -// int objectIndex = predicateTable.getObjectIndex(predicateIndex, pRef); -// forObjects(resourceKey, predicateKey, objectIndex, graph.processor, graph, procedure, support); + SessionImplSocket session = (SessionImplSocket)graph.getSession(); + ClusterSupport support = session.clusterTranslator; + + if (DEBUG) + System.out.println("Cluster.forObjects3: rk=" + resourceKey + " pk=" + predicateKey); + final int resourceIndex = getLocalReference(resourceKey); + final int pRef = getInternalReferenceOrZero(predicateKey, support); + final ClusterI.CompleteTypeEnum pCompleteType = ClusterTraitsBase.getCompleteTypeFromResourceKey(predicateKey); + if (ClusterI.CompleteTypeEnum.NotComplete != pCompleteType) { + resourceTable.foreachObject(resourceIndex, graph, procedure, support, pRef, pCompleteType, completeTable, this); + return; + } + final int predicateIndex = resourceTable.getPredicateIndex(resourceIndex); + if (0 == predicateIndex) { + resourceTable.foreachObject(resourceIndex, graph, procedure, support, pRef, pCompleteType, completeTable, this); + return; + } + int objectIndex = predicateTable.getObjectIndex(predicateIndex, pRef); + forObjects(resourceKey, predicateKey, objectIndex, graph.processor, graph, procedure, support); } @Override public void forObjects(ReadGraphImpl graph, int resourceKey, ForEachObjectProcedure procedure) throws DatabaseException { - throw new UnsupportedOperationException(); - -// SessionImplSocket session = (SessionImplSocket)graph.getSession(); -// ClusterSupport support = session.clusterTranslator; -// final int predicateKey = procedure.predicateKey; -// if (DEBUG) -// System.out.println("Cluster.forObjects3: rk=" + resourceKey + " pk=" + predicateKey); -// final int resourceIndex = getLocalReference(resourceKey); -// final int pRef = getInternalReferenceOrZero(predicateKey, support); -// final ClusterI.CompleteTypeEnum pCompleteType = ClusterTraitsBase.getCompleteTypeFromResourceKey(predicateKey); -// if (ClusterI.CompleteTypeEnum.NotComplete != pCompleteType) { -// resourceTable.foreachObject(resourceIndex, graph, procedure, support, pRef, pCompleteType, completeTable, this); -// return; -// } -// final int predicateIndex = resourceTable.getPredicateIndex(resourceIndex); -// if (0 == predicateIndex) { -// resourceTable.foreachObject(resourceIndex, graph, procedure, support, pRef, pCompleteType, completeTable, this); -// return; -// } -// int objectIndex = predicateTable.getObjectIndex(predicateIndex, pRef); -// forObjects(resourceKey, predicateKey, objectIndex, graph.processor, graph, procedure, support); + SessionImplSocket session = (SessionImplSocket)graph.getSession(); + ClusterSupport support = session.clusterTranslator; + final int predicateKey = procedure.predicateKey; + if (DEBUG) + System.out.println("Cluster.forObjects3: rk=" + resourceKey + " pk=" + predicateKey); + final int resourceIndex = getLocalReference(resourceKey); + final int pRef = getInternalReferenceOrZero(predicateKey, support); + final ClusterI.CompleteTypeEnum pCompleteType = ClusterTraitsBase.getCompleteTypeFromResourceKey(predicateKey); + if (ClusterI.CompleteTypeEnum.NotComplete != pCompleteType) { + resourceTable.foreachObject(resourceIndex, graph, procedure, support, pRef, pCompleteType, completeTable, this); + return; + } + final int predicateIndex = resourceTable.getPredicateIndex(resourceIndex); + if (0 == predicateIndex) { + resourceTable.foreachObject(resourceIndex, graph, procedure, support, pRef, pCompleteType, completeTable, this); + return; + } + int objectIndex = predicateTable.getObjectIndex(predicateIndex, pRef); + forObjects(resourceKey, predicateKey, objectIndex, graph.processor, graph, procedure, support); } @Override @@ -571,8 +571,11 @@ final public class ClusterBig extends ClusterImpl { try { return resourceTable.getValue(valueTable, resourceIndex); } catch (ExternalValueException e) { - return clusterSupport.impl.getResourceFile(clusterUID.asBytes(), resourceIndex); -// return support.getValueEx(resourceIndex, clusterUID.second); + try { + return clusterSupport.impl.getResourceFile(clusterUID.asBytes(), resourceIndex); + } catch (AcornAccessVerificationException | IllegalAcornStateException e1) { + throw new DatabaseException(e1); + } } } @Override @@ -859,7 +862,7 @@ final public class ClusterBig extends ClusterImpl { } @Override - public void load(Callback r) { + public void load(Consumer r) { throw new Error("Not supported."); }