]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.procore/src/org/simantics/db/procore/cluster/ClusterSmall.java
Removed contact application support prints
[simantics/platform.git] / bundles / org.simantics.db.procore / src / org / simantics / db / procore / cluster / ClusterSmall.java
index 1b7dc0d32598374fb1b062c26987a580f0ab7964..b24862a67ba190fbda07166346724a934c2e8d64 100644 (file)
@@ -29,10 +29,12 @@ import org.simantics.db.impl.ForPossibleRelatedValueProcedure;
 import org.simantics.db.impl.Table;
 import org.simantics.db.impl.TableHeader;
 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.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;
@@ -269,7 +272,7 @@ final public class ClusterSmall extends ClusterImpl {
         return objectTable.getSingleObject(objectIndex, support, this);
     }
 
-    public void forObjects(ReadGraphImpl graph, int resourceKey, int predicateKey, int objectIndex, AsyncMultiProcedure<Resource> procedure,
+    public void forObjects(ReadGraphImpl graph, int resourceKey, int predicateKey, int objectIndex, SyncMultiProcedure<Resource> procedure,
             ClusterSupport support) throws DatabaseException {
         if (deleted) return;
         if (DEBUG)
@@ -284,7 +287,7 @@ final public class ClusterSmall extends ClusterImpl {
         objectTable.foreachObject(graph, objectIndex, procedure, this);
     }
 
-    public <C> void forObjects(ReadGraphImpl graph, int resourceKey, int predicateKey, int objectIndex, C context, AsyncContextMultiProcedure<C, Resource> procedure,
+    public <C> void forObjects(ReadGraphImpl graph, int resourceKey, int predicateKey, int objectIndex, C context, SyncContextMultiProcedure<C, Resource> procedure,
             ClusterSupport support) throws DatabaseException {
         if (DEBUG)
             System.out.println("ClusterSmall.forObjects1: rk=" + resourceKey + " pk=" + predicateKey);
@@ -383,7 +386,7 @@ final public class ClusterSmall extends ClusterImpl {
 
     @Override
     public void forObjects(ReadGraphImpl graph, int resourceKey,
-            int predicateKey, AsyncMultiProcedure<Resource> procedure) throws DatabaseException {
+            int predicateKey, SyncMultiProcedure<Resource> procedure) throws DatabaseException {
         if (deleted) return;
         SessionImplSocket session = (SessionImplSocket)graph.getSession();
         ClusterSupport support = session.clusterTranslator;
@@ -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)
@@ -568,7 +576,7 @@ final public class ClusterSmall extends ClusterImpl {
                 support.setStreamOff(false);
             ClusterI cluster2 = cluster.addRelation(sResourceKey, pResourceKey, oResourceKey, support);
             if (cluster != cluster2)
-                throw new DatabaseException("Internal error. Contact application support.");
+                throw new DatabaseException("Internal error, cluster mismatch.");
             return cluster;
         }
 //        check();
@@ -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
@@ -887,8 +908,11 @@ final public class ClusterSmall extends ClusterImpl {
         if (ClusterTraitsSmall.resourceRefIsLocal(resourceRef)) {
             key = clusterBits | resourceRef;
         } else {
-            foreignTable.fillResourceUID(ClusterTraitsSmall.resourceRefGetForeignIndex((short)resourceRef), this);
-            key = ClusterTraitsBase.createResourceKey(clusterSupport.getClusterKeyByClusterUIDOrMake(clusterUID1, clusterUID2), executeIndex);
+            // TODO: not so nice
+            synchronized(this) {
+                foreignTable.fillResourceUID(ClusterTraitsSmall.resourceRefGetForeignIndex((short)resourceRef), this);
+                key = ClusterTraitsBase.createResourceKey(clusterSupport.getClusterKeyByClusterUIDOrMake(clusterUID1, clusterUID2), executeIndex);
+            }
         }
         if (DEBUG)
             System.out.println("ClusterSmall.execute key=" + key);
@@ -936,13 +960,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<DatabaseException> 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 +988,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 +1041,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 +1102,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) {