]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.procore/src/fi/vtt/simantics/procore/internal/ClusterTranslatorImpl.java
Defer change set disposal in State.commitWriteTransaction
[simantics/platform.git] / bundles / org.simantics.db.procore / src / fi / vtt / simantics / procore / internal / ClusterTranslatorImpl.java
index 7eab64cce11aecc043d8fcb8e13b57780cba02aa..9de56f80e4fba04eb5d0cc1668b34bc5308a3a21 100644 (file)
-package fi.vtt.simantics.procore.internal;\r
-\r
-import java.io.InputStream;\r
-\r
-import org.simantics.db.Session;\r
-import org.simantics.db.common.utils.Logger;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.db.impl.ClusterBase;\r
-import org.simantics.db.impl.ClusterTranslator;\r
-import org.simantics.db.impl.IClusterTable;\r
-import org.simantics.db.impl.ResourceImpl;\r
-import org.simantics.db.procore.cluster.ClusterImpl;\r
-import org.simantics.db.service.ClusterUID;\r
-\r
-public class ClusterTranslatorImpl implements ClusterTranslator {\r
-\r
-    final private SessionImplSocket session;\r
-    final private ClusterStream clusterStream;\r
-    final private ClusterTable clusterTable;\r
-\r
-    ClusterTranslatorImpl(SessionImplSocket session) {\r
-        this.session = session;\r
-        this.clusterStream = session.clusterStream;\r
-        this.clusterTable = session.clusterTable;\r
-    }\r
-\r
-    @Override\r
-    public byte[] getValueEx(int resourceIndex, long clusterId)\r
-    throws DatabaseException {\r
-        return session.graphSession.getResourceValue(resourceIndex, clusterTable.makeClusterUID(clusterId));\r
-    }\r
-\r
-    @Override\r
-    public InputStream getValueStreamEx(int resourceIndex, long clusterId)\r
-    throws DatabaseException {\r
-        return session.graphSession.getResourceValueStream(resourceIndex, clusterTable.makeClusterUID(clusterId), 0, 0);\r
-    }\r
-\r
-    @Override\r
-    public byte[] getValueEx(int resourceIndex, long clusterId, long voffset, int length)\r
-    throws DatabaseException {\r
-        return session.graphSession.getResourceValue(resourceIndex, clusterTable.makeClusterUID(clusterId), voffset, length);\r
-    }\r
-\r
-    public long getValueSizeEx(int resourceIndex, long clusterId)\r
-    throws DatabaseException {\r
-        return session.graphSession.getResourceValueSize(resourceIndex, clusterTable.makeClusterUID(clusterId));\r
-    }\r
-    public int wait4RequestsLess(int limit)\r
-    throws DatabaseException {\r
-        return session.graphSession.wait4RequestsLess(limit);\r
-    }\r
-    @Override\r
-    public int createClusterKeyByClusterUID(ClusterUID clusterUID, long clusterId) {\r
-        return clusterTable.makeProxy(clusterUID, clusterId).getClusterKey();\r
-    }\r
-    @Override\r
-    public int getClusterKeyByClusterUIDOrMake(ClusterUID clusterUID) {\r
-        return clusterTable.getClusterKeyByClusterUIDOrMakeProxy(clusterUID);\r
-    }\r
-    @Override\r
-    public int getClusterKeyByClusterUIDOrMake(long id1, long id2) {\r
-        return clusterTable.getClusterKeyByClusterUIDOrMakeProxy(id1, id2);\r
-    }\r
-    @Override\r
-    public ClusterBase getClusterByClusterUIDOrMake(ClusterUID clusterUID) {\r
-        return clusterTable.getClusterByClusterUIDOrMakeProxy(clusterUID);\r
-    }\r
-    @Override\r
-    final public ClusterBase getClusterByClusterId(long clusterId) {\r
-        ClusterBase cluster =  clusterTable.getClusterByClusterId(clusterId);\r
-        if (null != cluster)\r
-            return cluster;\r
-        try {\r
-            return clusterTable.getLoadOrThrow(clusterId);\r
-        } catch (DatabaseException e) {\r
-            e.printStackTrace();\r
-            Logger.defaultLogError("Cluster not found by id. cluster id=" + clusterId, e);\r
-        }\r
-        return null;\r
-    }\r
-\r
-    @Override\r
-    public ClusterBase getClusterByClusterKey(int clusterKey) {\r
-        ClusterBase proxy = clusterTable.getClusterByClusterKey(clusterKey);\r
-        if (null == proxy)\r
-            return null; // throw new ResourceNotFoundException(id);\r
-        return proxy;\r
-    }\r
-\r
-    @Override\r
-    public ClusterBase getClusterByResourceKey(int resourceKey) {\r
-\r
-        ClusterBase proxy = clusterTable.getClusterByResourceKey(resourceKey);\r
-        if (null == proxy)\r
-            return null; // throw new ResourceNotFoundException(id);\r
-\r
-        return proxy;\r
-\r
-    }\r
-    @Override\r
-    public long getClusterIdOrCreate(ClusterUID clusterUID) {\r
-        return clusterTable.getClusterIdOrCreate(clusterUID);\r
-    }\r
-    @Override\r
-    public void createResource(Object cluster, short resourceIndex, long clusterId) {\r
-        ClusterImpl impl = (ClusterImpl)cluster;\r
-        if(impl.cc == null) impl.cc = new ClusterChange(clusterStream, impl);\r
-        if (null == clusterStream) {\r
-            System.out.println("Temporary skip of clusterStream.createResource");\r
-            return;\r
-        } else\r
-            clusterStream.createResource(impl.cc, resourceIndex, clusterTable.makeClusterUID(clusterId));\r
-    }\r
-\r
-    @Override\r
-    public void addStatementIndex(Object cluster, int resourceKey, ClusterUID clusterUID, byte op) {\r
-        ClusterImpl impl = (ClusterImpl)cluster;\r
-        if (null == impl.change)\r
-            return;\r
-        clusterStream.addStatementIndex(impl.change, resourceKey, clusterUID, op);\r
-    }\r
-\r
-    @Override\r
-    public void addStatement(Object cluster) {\r
-        ClusterImpl impl = (ClusterImpl)cluster;\r
-        if(impl.cc == null) impl.cc = new ClusterChange(clusterStream, impl);\r
-        clusterStream.addStatement(impl.cc, impl.change);\r
-    }\r
-\r
-\r
-    @Override\r
-    public void cancelStatement(Object cluster) {\r
-        ClusterImpl impl = (ClusterImpl)cluster;\r
-        if(impl.cc == null) impl.cc = new ClusterChange(clusterStream, impl);\r
-        clusterStream.cancelStatement(impl.change);\r
-    }\r
-\r
-    @Override\r
-    public void removeStatement(Object cluster) {\r
-        ClusterImpl impl = (ClusterImpl)cluster;\r
-        if(impl.cc == null) impl.cc = new ClusterChange(clusterStream, impl);\r
-        clusterStream.removeStatement(impl.cc, impl.change);\r
-    }\r
-\r
-    @Override\r
-    public void cancelValue(Object cluster) {\r
-        ClusterImpl impl = (ClusterImpl)cluster;\r
-        if(impl.cc == null) impl.cc = new ClusterChange(clusterStream, impl);\r
-        clusterStream.cancelValue(impl.change);\r
-    }\r
-\r
-    @Override\r
-    public void removeValue(Object cluster) {\r
-        ClusterImpl impl = (ClusterImpl)cluster;\r
-        if(impl.cc == null) impl.cc = new ClusterChange(clusterStream, impl);\r
-        clusterStream.removeValue(impl.cc, impl.change);\r
-    }\r
-\r
-    @Override\r
-    public void setValue(Object cluster, long clusterId, byte[] bytes, int length) {\r
-        ClusterImpl impl = (ClusterImpl)cluster;\r
-        if(impl.cc == null) impl.cc = new ClusterChange(clusterStream, impl);\r
-        clusterStream.setValue(impl.cc, impl.change, clusterId, bytes, length);\r
-    }\r
-\r
-    @Override\r
-    public void modiValue(Object cluster, long clusterId, long voffset, int length, byte[] bytes, int offset) {\r
-        ClusterImpl impl = (ClusterImpl)cluster;\r
-        if(impl.cc == null) impl.cc = new ClusterChange(clusterStream, impl);\r
-        clusterStream.modiValue(impl.cc, impl.change, clusterId, voffset, length, bytes, offset);\r
-    }\r
-\r
-    @Override\r
-    public void setStreamOff(boolean setOff) {\r
-        clusterStream.setOff(setOff);\r
-    }\r
-\r
-    @Override\r
-    public boolean getStreamOff() {\r
-        return clusterStream.getOff();\r
-    }\r
-\r
-    @Override\r
-    public void setImmutable(Object cluster, boolean immutable) {\r
-        ClusterImpl impl = (ClusterImpl)cluster;\r
-       clusterTable.markImmutable(impl, immutable);\r
-        if(impl.cc == null) impl.cc = new ClusterChange(clusterStream, impl);\r
-        clusterStream.setImmutable(impl.cc, impl.change, immutable);\r
-    }\r
-\r
-    @Override\r
-    public void setDeleted(Object cluster, boolean deleted) {\r
-        ClusterImpl impl = (ClusterImpl)cluster;\r
-        //clusterTable.markDeleted(impl, deleted);\r
-        if (impl.cc == null)\r
-            impl.cc = new ClusterChange(clusterStream, impl);\r
-        clusterStream.setDeleted(impl.cc, impl.change, deleted);\r
-    }\r
-\r
-    @Override\r
-    public void undoValueEx(Object cluster, int resourceIndex) {\r
-        ClusterImpl impl = (ClusterImpl)cluster;\r
-        if(impl.cc == null) impl.cc = new ClusterChange(clusterStream, impl);\r
-        clusterStream.undoValueEx(impl.cc, impl.change, resourceIndex);\r
-    }\r
-\r
-    @Override\r
-    public ResourceImpl getResource(int id) {\r
-        return new ResourceImpl(session.resourceSupport, id);\r
-    }\r
-\r
-    @Override\r
-    public ResourceImpl getResource(int callerThread, int id) {\r
-        assert (id != 0);\r
-        return new ResourceImpl(session.resourceSupport, id);\r
-    }\r
-\r
-    @Override\r
-    public Session getSession() {\r
-        return session;\r
-    }\r
-\r
-    @Override\r
-    public IClusterTable getClusterTable() {\r
-        return clusterTable;\r
-    }\r
-\r
-}\r
+package fi.vtt.simantics.procore.internal;
+
+import java.io.InputStream;
+
+import org.simantics.db.Session;
+import org.simantics.db.common.utils.Logger;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.impl.ClusterBase;
+import org.simantics.db.impl.ClusterTranslator;
+import org.simantics.db.impl.IClusterTable;
+import org.simantics.db.impl.ResourceImpl;
+import org.simantics.db.procore.cluster.ClusterImpl;
+import org.simantics.db.service.ClusterUID;
+
+public class ClusterTranslatorImpl implements ClusterTranslator {
+
+    final private SessionImplSocket session;
+    final private ClusterStream clusterStream;
+    final private ClusterTable clusterTable;
+
+    ClusterTranslatorImpl(SessionImplSocket session) {
+        this.session = session;
+        this.clusterStream = session.clusterStream;
+        this.clusterTable = session.clusterTable;
+    }
+
+    @Override
+    public byte[] getValueEx(int resourceIndex, long clusterId)
+    throws DatabaseException {
+        return session.graphSession.getResourceValue(resourceIndex, clusterTable.makeClusterUID(clusterId));
+    }
+
+    @Override
+    public InputStream getValueStreamEx(int resourceIndex, long clusterId)
+    throws DatabaseException {
+        return session.graphSession.getResourceValueStream(resourceIndex, clusterTable.makeClusterUID(clusterId), 0, 0);
+    }
+
+    @Override
+    public byte[] getValueEx(int resourceIndex, long clusterId, long voffset, int length)
+    throws DatabaseException {
+        return session.graphSession.getResourceValue(resourceIndex, clusterTable.makeClusterUID(clusterId), voffset, length);
+    }
+
+    public long getValueSizeEx(int resourceIndex, long clusterId)
+    throws DatabaseException {
+        return session.graphSession.getResourceValueSize(resourceIndex, clusterTable.makeClusterUID(clusterId));
+    }
+    public int wait4RequestsLess(int limit)
+    throws DatabaseException {
+        return session.graphSession.wait4RequestsLess(limit);
+    }
+    @Override
+    public int createClusterKeyByClusterUID(ClusterUID clusterUID, long clusterId) {
+        return clusterTable.makeProxy(clusterUID, clusterId).getClusterKey();
+    }
+    @Override
+    public int getClusterKeyByClusterUIDOrMake(ClusterUID clusterUID) {
+        return clusterTable.getClusterKeyByClusterUIDOrMakeProxy(clusterUID);
+    }
+    @Override
+    public int getClusterKeyByClusterUIDOrMake(long id1, long id2) {
+        return clusterTable.getClusterKeyByClusterUIDOrMakeProxy(id1, id2);
+    }
+    @Override
+    public ClusterBase getClusterByClusterUIDOrMake(ClusterUID clusterUID) {
+        return clusterTable.getClusterByClusterUIDOrMakeProxy(clusterUID);
+    }
+    @Override
+    final public ClusterBase getClusterByClusterId(long clusterId) {
+        ClusterBase cluster =  clusterTable.getClusterByClusterId(clusterId);
+        if (null != cluster)
+            return cluster;
+        try {
+            return clusterTable.getLoadOrThrow(clusterId);
+        } catch (DatabaseException e) {
+            e.printStackTrace();
+            Logger.defaultLogError("Cluster not found by id. cluster id=" + clusterId, e);
+        }
+        return null;
+    }
+
+    @Override
+    public ClusterBase getClusterByClusterKey(int clusterKey) {
+        ClusterBase proxy = clusterTable.getClusterByClusterKey(clusterKey);
+        if (null == proxy)
+            return null; // throw new ResourceNotFoundException(id);
+        return proxy;
+    }
+
+    @Override
+    public ClusterBase getClusterByResourceKey(int resourceKey) {
+
+        ClusterBase proxy = clusterTable.getClusterByResourceKey(resourceKey);
+        if (null == proxy)
+            return null; // throw new ResourceNotFoundException(id);
+
+        return proxy;
+
+    }
+    @Override
+    public long getClusterIdOrCreate(ClusterUID clusterUID) {
+        return clusterTable.getClusterIdOrCreate(clusterUID);
+    }
+    @Override
+    public void createResource(Object cluster, short resourceIndex, long clusterId) {
+        ClusterImpl impl = (ClusterImpl)cluster;
+        if(impl.cc == null) impl.cc = new ClusterChange(clusterStream, impl);
+        if (null == clusterStream) {
+            System.out.println("Temporary skip of clusterStream.createResource");
+            return;
+        } else
+            clusterStream.createResource(impl.cc, resourceIndex, clusterTable.makeClusterUID(clusterId));
+    }
+
+    @Override
+    public void addStatementIndex(Object cluster, int resourceKey, ClusterUID clusterUID, byte op) {
+        ClusterImpl impl = (ClusterImpl)cluster;
+        if (null == impl.change)
+            return;
+        clusterStream.addStatementIndex(impl.change, resourceKey, clusterUID, op);
+    }
+
+    @Override
+    public void addStatement(Object cluster) {
+        ClusterImpl impl = (ClusterImpl)cluster;
+        if(impl.cc == null) impl.cc = new ClusterChange(clusterStream, impl);
+        clusterStream.addStatement(impl.cc, impl.change);
+    }
+
+
+    @Override
+    public void cancelStatement(Object cluster) {
+        ClusterImpl impl = (ClusterImpl)cluster;
+        if(impl.cc == null) impl.cc = new ClusterChange(clusterStream, impl);
+        clusterStream.cancelStatement(impl.change);
+    }
+
+    @Override
+    public void removeStatement(Object cluster) {
+        ClusterImpl impl = (ClusterImpl)cluster;
+        if(impl.cc == null) impl.cc = new ClusterChange(clusterStream, impl);
+        clusterStream.removeStatement(impl.cc, impl.change);
+    }
+
+    @Override
+    public void cancelValue(Object cluster) {
+        ClusterImpl impl = (ClusterImpl)cluster;
+        if(impl.cc == null) impl.cc = new ClusterChange(clusterStream, impl);
+        clusterStream.cancelValue(impl.change);
+    }
+
+    @Override
+    public void removeValue(Object cluster) {
+        ClusterImpl impl = (ClusterImpl)cluster;
+        if(impl.cc == null) impl.cc = new ClusterChange(clusterStream, impl);
+        clusterStream.removeValue(impl.cc, impl.change);
+    }
+
+    @Override
+    public void setValue(Object cluster, long clusterId, byte[] bytes, int length) {
+        ClusterImpl impl = (ClusterImpl)cluster;
+        if(impl.cc == null) impl.cc = new ClusterChange(clusterStream, impl);
+        clusterStream.setValue(impl.cc, impl.change, clusterId, bytes, length);
+    }
+
+    @Override
+    public void modiValue(Object cluster, long clusterId, long voffset, int length, byte[] bytes, int offset) {
+        ClusterImpl impl = (ClusterImpl)cluster;
+        if(impl.cc == null) impl.cc = new ClusterChange(clusterStream, impl);
+        clusterStream.modiValue(impl.cc, impl.change, clusterId, voffset, length, bytes, offset);
+    }
+
+    @Override
+    public void setStreamOff(boolean setOff) {
+        clusterStream.setOff(setOff);
+    }
+
+    @Override
+    public boolean getStreamOff() {
+        return clusterStream.getOff();
+    }
+
+    @Override
+    public void setImmutable(Object cluster, boolean immutable) {
+        ClusterImpl impl = (ClusterImpl)cluster;
+       clusterTable.markImmutable(impl, immutable);
+        if(impl.cc == null) impl.cc = new ClusterChange(clusterStream, impl);
+        clusterStream.setImmutable(impl.cc, impl.change, immutable);
+    }
+
+    @Override
+    public void setDeleted(Object cluster, boolean deleted) {
+        ClusterImpl impl = (ClusterImpl)cluster;
+        //clusterTable.markDeleted(impl, deleted);
+        if (impl.cc == null)
+            impl.cc = new ClusterChange(clusterStream, impl);
+        clusterStream.setDeleted(impl.cc, impl.change, deleted);
+    }
+
+    @Override
+    public void undoValueEx(Object cluster, int resourceIndex) {
+        ClusterImpl impl = (ClusterImpl)cluster;
+        if(impl.cc == null) impl.cc = new ClusterChange(clusterStream, impl);
+        clusterStream.undoValueEx(impl.cc, impl.change, resourceIndex);
+    }
+
+    @Override
+    public ResourceImpl getResource(int id) {
+        return new ResourceImpl(session.resourceSupport, id);
+    }
+
+    @Override
+    public ResourceImpl getResource(int callerThread, int id) {
+        assert (id != 0);
+        return new ResourceImpl(session.resourceSupport, id);
+    }
+
+    @Override
+    public Session getSession() {
+        return session;
+    }
+
+    @Override
+    public IClusterTable getClusterTable() {
+        return clusterTable;
+    }
+
+}