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;
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;
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)
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);
}
}
@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
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);
@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) {
clusterTable.load2(clusterId, clusterKey);
callback.run();
} catch (DatabaseException e) {
- e.printStackTrace();
+ LOGGER.error("Failed to load cluster with clusterId " + clusterId, e);
}
}