1 package fi.vtt.simantics.procore.internal;
\r
3 import java.io.InputStream;
\r
5 import org.simantics.db.Session;
\r
6 import org.simantics.db.common.utils.Logger;
\r
7 import org.simantics.db.exception.DatabaseException;
\r
8 import org.simantics.db.impl.ClusterBase;
\r
9 import org.simantics.db.impl.ClusterTranslator;
\r
10 import org.simantics.db.impl.IClusterTable;
\r
11 import org.simantics.db.impl.ResourceImpl;
\r
12 import org.simantics.db.procore.cluster.ClusterImpl;
\r
13 import org.simantics.db.service.ClusterUID;
\r
15 public class ClusterTranslatorImpl implements ClusterTranslator {
\r
17 final private SessionImplSocket session;
\r
18 final private ClusterStream clusterStream;
\r
19 final private ClusterTable clusterTable;
\r
21 ClusterTranslatorImpl(SessionImplSocket session) {
\r
22 this.session = session;
\r
23 this.clusterStream = session.clusterStream;
\r
24 this.clusterTable = session.clusterTable;
\r
28 public byte[] getValueEx(int resourceIndex, long clusterId)
\r
29 throws DatabaseException {
\r
30 return session.graphSession.getResourceValue(resourceIndex, clusterTable.makeClusterUID(clusterId));
\r
34 public InputStream getValueStreamEx(int resourceIndex, long clusterId)
\r
35 throws DatabaseException {
\r
36 return session.graphSession.getResourceValueStream(resourceIndex, clusterTable.makeClusterUID(clusterId), 0, 0);
\r
40 public byte[] getValueEx(int resourceIndex, long clusterId, long voffset, int length)
\r
41 throws DatabaseException {
\r
42 return session.graphSession.getResourceValue(resourceIndex, clusterTable.makeClusterUID(clusterId), voffset, length);
\r
45 public long getValueSizeEx(int resourceIndex, long clusterId)
\r
46 throws DatabaseException {
\r
47 return session.graphSession.getResourceValueSize(resourceIndex, clusterTable.makeClusterUID(clusterId));
\r
49 public int wait4RequestsLess(int limit)
\r
50 throws DatabaseException {
\r
51 return session.graphSession.wait4RequestsLess(limit);
\r
54 public int createClusterKeyByClusterUID(ClusterUID clusterUID, long clusterId) {
\r
55 return clusterTable.makeProxy(clusterUID, clusterId).getClusterKey();
\r
58 public int getClusterKeyByClusterUIDOrMake(ClusterUID clusterUID) {
\r
59 return clusterTable.getClusterKeyByClusterUIDOrMakeProxy(clusterUID);
\r
62 public int getClusterKeyByClusterUIDOrMake(long id1, long id2) {
\r
63 return clusterTable.getClusterKeyByClusterUIDOrMakeProxy(id1, id2);
\r
66 public ClusterBase getClusterByClusterUIDOrMake(ClusterUID clusterUID) {
\r
67 return clusterTable.getClusterByClusterUIDOrMakeProxy(clusterUID);
\r
70 final public ClusterBase getClusterByClusterId(long clusterId) {
\r
71 ClusterBase cluster = clusterTable.getClusterByClusterId(clusterId);
\r
72 if (null != cluster)
\r
75 return clusterTable.getLoadOrThrow(clusterId);
\r
76 } catch (DatabaseException e) {
\r
77 e.printStackTrace();
\r
78 Logger.defaultLogError("Cluster not found by id. cluster id=" + clusterId, e);
\r
84 public ClusterBase getClusterByClusterKey(int clusterKey) {
\r
85 ClusterBase proxy = clusterTable.getClusterByClusterKey(clusterKey);
\r
87 return null; // throw new ResourceNotFoundException(id);
\r
92 public ClusterBase getClusterByResourceKey(int resourceKey) {
\r
94 ClusterBase proxy = clusterTable.getClusterByResourceKey(resourceKey);
\r
96 return null; // throw new ResourceNotFoundException(id);
\r
102 public long getClusterIdOrCreate(ClusterUID clusterUID) {
\r
103 return clusterTable.getClusterIdOrCreate(clusterUID);
\r
106 public void createResource(Object cluster, short resourceIndex, long clusterId) {
\r
107 ClusterImpl impl = (ClusterImpl)cluster;
\r
108 if(impl.cc == null) impl.cc = new ClusterChange(clusterStream, impl);
\r
109 if (null == clusterStream) {
\r
110 System.out.println("Temporary skip of clusterStream.createResource");
\r
113 clusterStream.createResource(impl.cc, resourceIndex, clusterTable.makeClusterUID(clusterId));
\r
117 public void addStatementIndex(Object cluster, int resourceKey, ClusterUID clusterUID, byte op) {
\r
118 ClusterImpl impl = (ClusterImpl)cluster;
\r
119 if (null == impl.change)
\r
121 clusterStream.addStatementIndex(impl.change, resourceKey, clusterUID, op);
\r
125 public void addStatement(Object cluster) {
\r
126 ClusterImpl impl = (ClusterImpl)cluster;
\r
127 if(impl.cc == null) impl.cc = new ClusterChange(clusterStream, impl);
\r
128 clusterStream.addStatement(impl.cc, impl.change);
\r
133 public void cancelStatement(Object cluster) {
\r
134 ClusterImpl impl = (ClusterImpl)cluster;
\r
135 if(impl.cc == null) impl.cc = new ClusterChange(clusterStream, impl);
\r
136 clusterStream.cancelStatement(impl.change);
\r
140 public void removeStatement(Object cluster) {
\r
141 ClusterImpl impl = (ClusterImpl)cluster;
\r
142 if(impl.cc == null) impl.cc = new ClusterChange(clusterStream, impl);
\r
143 clusterStream.removeStatement(impl.cc, impl.change);
\r
147 public void cancelValue(Object cluster) {
\r
148 ClusterImpl impl = (ClusterImpl)cluster;
\r
149 if(impl.cc == null) impl.cc = new ClusterChange(clusterStream, impl);
\r
150 clusterStream.cancelValue(impl.change);
\r
154 public void removeValue(Object cluster) {
\r
155 ClusterImpl impl = (ClusterImpl)cluster;
\r
156 if(impl.cc == null) impl.cc = new ClusterChange(clusterStream, impl);
\r
157 clusterStream.removeValue(impl.cc, impl.change);
\r
161 public void setValue(Object cluster, long clusterId, byte[] bytes, int length) {
\r
162 ClusterImpl impl = (ClusterImpl)cluster;
\r
163 if(impl.cc == null) impl.cc = new ClusterChange(clusterStream, impl);
\r
164 clusterStream.setValue(impl.cc, impl.change, clusterId, bytes, length);
\r
168 public void modiValue(Object cluster, long clusterId, long voffset, int length, byte[] bytes, int offset) {
\r
169 ClusterImpl impl = (ClusterImpl)cluster;
\r
170 if(impl.cc == null) impl.cc = new ClusterChange(clusterStream, impl);
\r
171 clusterStream.modiValue(impl.cc, impl.change, clusterId, voffset, length, bytes, offset);
\r
175 public void setStreamOff(boolean setOff) {
\r
176 clusterStream.setOff(setOff);
\r
180 public boolean getStreamOff() {
\r
181 return clusterStream.getOff();
\r
185 public void setImmutable(Object cluster, boolean immutable) {
\r
186 ClusterImpl impl = (ClusterImpl)cluster;
\r
187 clusterTable.markImmutable(impl, immutable);
\r
188 if(impl.cc == null) impl.cc = new ClusterChange(clusterStream, impl);
\r
189 clusterStream.setImmutable(impl.cc, impl.change, immutable);
\r
193 public void setDeleted(Object cluster, boolean deleted) {
\r
194 ClusterImpl impl = (ClusterImpl)cluster;
\r
195 //clusterTable.markDeleted(impl, deleted);
\r
196 if (impl.cc == null)
\r
197 impl.cc = new ClusterChange(clusterStream, impl);
\r
198 clusterStream.setDeleted(impl.cc, impl.change, deleted);
\r
202 public void undoValueEx(Object cluster, int resourceIndex) {
\r
203 ClusterImpl impl = (ClusterImpl)cluster;
\r
204 if(impl.cc == null) impl.cc = new ClusterChange(clusterStream, impl);
\r
205 clusterStream.undoValueEx(impl.cc, impl.change, resourceIndex);
\r
209 public ResourceImpl getResource(int id) {
\r
210 return new ResourceImpl(session.resourceSupport, id);
\r
214 public ResourceImpl getResource(int callerThread, int id) {
\r
216 return new ResourceImpl(session.resourceSupport, id);
\r
220 public Session getSession() {
\r
225 public IClusterTable getClusterTable() {
\r
226 return clusterTable;
\r