]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.procore/src/fi/vtt/simantics/procore/internal/ClusterTranslatorImpl.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.db.procore / src / fi / vtt / simantics / procore / internal / ClusterTranslatorImpl.java
diff --git a/bundles/org.simantics.db.procore/src/fi/vtt/simantics/procore/internal/ClusterTranslatorImpl.java b/bundles/org.simantics.db.procore/src/fi/vtt/simantics/procore/internal/ClusterTranslatorImpl.java
new file mode 100644 (file)
index 0000000..7eab64c
--- /dev/null
@@ -0,0 +1,229 @@
+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