-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;
+ }
+
+}