X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.db.procore%2Fsrc%2Forg%2Fsimantics%2Fdb%2Fprocore%2Fcluster%2FClusterSmall.java;h=c8309c6bf5303a2909564de1a2f29637a8a34534;hb=86239efa9f50ae671563e6149a586093751a3e69;hp=1b7dc0d32598374fb1b062c26987a580f0ab7964;hpb=56a799c9b7d395cefb59e101cd0f7ce8d68f88e6;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.db.procore/src/org/simantics/db/procore/cluster/ClusterSmall.java b/bundles/org.simantics.db.procore/src/org/simantics/db/procore/cluster/ClusterSmall.java index 1b7dc0d32..c8309c6bf 100644 --- a/bundles/org.simantics.db.procore/src/org/simantics/db/procore/cluster/ClusterSmall.java +++ b/bundles/org.simantics.db.procore/src/org/simantics/db/procore/cluster/ClusterSmall.java @@ -33,6 +33,8 @@ import org.simantics.db.procedure.AsyncContextMultiProcedure; import org.simantics.db.procedure.AsyncMultiProcedure; import org.simantics.db.service.ClusterUID; import org.simantics.db.service.ResourceUID; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import fi.vtt.simantics.procore.DebugPolicy; import fi.vtt.simantics.procore.internal.ClusterChange; @@ -40,10 +42,11 @@ import fi.vtt.simantics.procore.internal.ClusterStream; import fi.vtt.simantics.procore.internal.ClusterTable; import fi.vtt.simantics.procore.internal.SessionImplSocket; import gnu.trove.map.hash.TIntShortHashMap; -import gnu.trove.procedure.TIntProcedure; import gnu.trove.set.hash.TIntHashSet; final public class ClusterSmall extends ClusterImpl { + + private static final Logger LOGGER = LoggerFactory.getLogger(ClusterSmall.class); private static final int TABLE_HEADER_SIZE = TableHeader.HEADER_SIZE + TableHeader.EXTRA_SIZE; private static final int RESOURCE_TABLE_OFFSET = 0; @@ -523,6 +526,11 @@ final public class ClusterSmall extends ClusterImpl { if (DEBUG) System.out.println("ClusterSmall.forPredicates: rk=" + resourceKey ); if (deleted) return false; + if(proxy) { + ClusterImpl cluster = clusterTable.load2(clusterId, clusterKey); + return cluster.forPredicates(resourceKey, procedure, context, support); + } + final int resourceIndex = getLocalReference(resourceKey); final int predicateIndex = resourceTable.getPredicateIndex(resourceIndex); if (0 == predicateIndex) @@ -653,6 +661,10 @@ final public class ClusterSmall extends ClusterImpl { public boolean hasValue(int resourceKey, ClusterSupport support) throws DatabaseException { if (deleted) return false; + if(proxy) { + ClusterImpl cluster = clusterTable.load2(clusterId, clusterKey); + return cluster.hasValue(resourceKey, support); + } int resourceIndex = getLocalReference(resourceKey); return resourceTable.hasValue(resourceIndex); } @@ -740,6 +752,15 @@ final public class ClusterSmall extends ClusterImpl { } @Override public boolean hasResource(int resourceKey, ClusterSupport support) { + if(proxy) { + try { + ClusterImpl cluster = clusterTable.load2(clusterId, clusterKey); + return cluster.hasResource(resourceKey, support); + } catch (DatabaseException e) { + LOGGER.error("Failed to load cluster with clusterId " + clusterId); + return false; + } + } if (deleted) return false; int clusterKey = ClusterTraitsBase.getClusterKeyFromResourceKeyNoThrow(resourceKey); if (this.clusterKey != clusterKey) // foreign resource @@ -936,13 +957,21 @@ final public class ClusterSmall extends ClusterImpl { @Override public void load() { if (deleted) return; - throw new Error("Not supported."); + try { + clusterTable.load2(clusterId, clusterKey); + } catch (DatabaseException e) { + LOGGER.error("Failed to load cluster with clusterId " + clusterId, e); + } } @Override public void load(Consumer r) { if (deleted) return; - throw new Error("Not supported."); + try { + clusterTable.load2(clusterId, clusterKey); + } catch (DatabaseException e) { + r.accept(e); + } } public boolean contains(int resourceKey) { @@ -956,7 +985,7 @@ final public class ClusterSmall extends ClusterImpl { clusterTable.load2(clusterId, clusterKey); callback.run(); } catch (DatabaseException e) { - e.printStackTrace(); + LOGGER.error("Failed to load cluster with clusterId " + clusterId, e); } } @@ -1009,6 +1038,7 @@ final public class ClusterSmall extends ClusterImpl { } if (deleted) return null; // Can't convert deleted cluster to big. ClusterBig big = new ClusterBig(getClusterUID(), clusterKey, support); + big.setImportance(importance); big.cc = this.cc; big.cc.clusterImpl = this; resourceTable.toBig(big, support, this); @@ -1069,14 +1099,14 @@ final public class ClusterSmall extends ClusterImpl { public String toString() { if (deleted) return "ClusterSmall[" + getClusterId() + " - has been deleted or hasn't been created.]"; try { - final TIntHashSet set = new TIntHashSet(); - TIntShortHashMap map = foreignTable.getResourceHashMap(); - map.forEachKey(new TIntProcedure() { - @Override - public boolean execute(int value) { - set.add(value & 0xfffff000); - return true; - } + ForeignTableSmall ft = foreignTable; + if (ft == null) + return "ClusterSmall[" + getClusterId() + " - " + getNumberOfResources() + "]"; + TIntShortHashMap map = ft.getResourceHashMap(); + TIntHashSet set = new TIntHashSet(); + map.forEachKey(value -> { + set.add(value & 0xfffff000); + return true; }); return "ClusterSmall[" + getClusterId() + " - " + getNumberOfResources() + " - " + foreignTable.getResourceHashMap().size() + " - " + set.size() + "]"; } catch (Throwable e) {