]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db.procore/src/fi/vtt/simantics/procore/internal/ClusterTranslatorImpl.java
Sync git svn branch with SVN repository r33249.
[simantics/platform.git] / bundles / org.simantics.db.procore / src / fi / vtt / simantics / procore / internal / ClusterTranslatorImpl.java
1 package fi.vtt.simantics.procore.internal;\r
2 \r
3 import java.io.InputStream;\r
4 \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
14 \r
15 public class ClusterTranslatorImpl implements ClusterTranslator {\r
16 \r
17     final private SessionImplSocket session;\r
18     final private ClusterStream clusterStream;\r
19     final private ClusterTable clusterTable;\r
20 \r
21     ClusterTranslatorImpl(SessionImplSocket session) {\r
22         this.session = session;\r
23         this.clusterStream = session.clusterStream;\r
24         this.clusterTable = session.clusterTable;\r
25     }\r
26 \r
27     @Override\r
28     public byte[] getValueEx(int resourceIndex, long clusterId)\r
29     throws DatabaseException {\r
30         return session.graphSession.getResourceValue(resourceIndex, clusterTable.makeClusterUID(clusterId));\r
31     }\r
32 \r
33     @Override\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
37     }\r
38 \r
39     @Override\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
43     }\r
44 \r
45     public long getValueSizeEx(int resourceIndex, long clusterId)\r
46     throws DatabaseException {\r
47         return session.graphSession.getResourceValueSize(resourceIndex, clusterTable.makeClusterUID(clusterId));\r
48     }\r
49     public int wait4RequestsLess(int limit)\r
50     throws DatabaseException {\r
51         return session.graphSession.wait4RequestsLess(limit);\r
52     }\r
53     @Override\r
54     public int createClusterKeyByClusterUID(ClusterUID clusterUID, long clusterId) {\r
55         return clusterTable.makeProxy(clusterUID, clusterId).getClusterKey();\r
56     }\r
57     @Override\r
58     public int getClusterKeyByClusterUIDOrMake(ClusterUID clusterUID) {\r
59         return clusterTable.getClusterKeyByClusterUIDOrMakeProxy(clusterUID);\r
60     }\r
61     @Override\r
62     public int getClusterKeyByClusterUIDOrMake(long id1, long id2) {\r
63         return clusterTable.getClusterKeyByClusterUIDOrMakeProxy(id1, id2);\r
64     }\r
65     @Override\r
66     public ClusterBase getClusterByClusterUIDOrMake(ClusterUID clusterUID) {\r
67         return clusterTable.getClusterByClusterUIDOrMakeProxy(clusterUID);\r
68     }\r
69     @Override\r
70     final public ClusterBase getClusterByClusterId(long clusterId) {\r
71         ClusterBase cluster =  clusterTable.getClusterByClusterId(clusterId);\r
72         if (null != cluster)\r
73             return cluster;\r
74         try {\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
79         }\r
80         return null;\r
81     }\r
82 \r
83     @Override\r
84     public ClusterBase getClusterByClusterKey(int clusterKey) {\r
85         ClusterBase proxy = clusterTable.getClusterByClusterKey(clusterKey);\r
86         if (null == proxy)\r
87             return null; // throw new ResourceNotFoundException(id);\r
88         return proxy;\r
89     }\r
90 \r
91     @Override\r
92     public ClusterBase getClusterByResourceKey(int resourceKey) {\r
93 \r
94         ClusterBase proxy = clusterTable.getClusterByResourceKey(resourceKey);\r
95         if (null == proxy)\r
96             return null; // throw new ResourceNotFoundException(id);\r
97 \r
98         return proxy;\r
99 \r
100     }\r
101     @Override\r
102     public long getClusterIdOrCreate(ClusterUID clusterUID) {\r
103         return clusterTable.getClusterIdOrCreate(clusterUID);\r
104     }\r
105     @Override\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
111             return;\r
112         } else\r
113             clusterStream.createResource(impl.cc, resourceIndex, clusterTable.makeClusterUID(clusterId));\r
114     }\r
115 \r
116     @Override\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
120             return;\r
121         clusterStream.addStatementIndex(impl.change, resourceKey, clusterUID, op);\r
122     }\r
123 \r
124     @Override\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
129     }\r
130 \r
131 \r
132     @Override\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
137     }\r
138 \r
139     @Override\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
144     }\r
145 \r
146     @Override\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
151     }\r
152 \r
153     @Override\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
158     }\r
159 \r
160     @Override\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
165     }\r
166 \r
167     @Override\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
172     }\r
173 \r
174     @Override\r
175     public void setStreamOff(boolean setOff) {\r
176         clusterStream.setOff(setOff);\r
177     }\r
178 \r
179     @Override\r
180     public boolean getStreamOff() {\r
181         return clusterStream.getOff();\r
182     }\r
183 \r
184     @Override\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
190     }\r
191 \r
192     @Override\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
199     }\r
200 \r
201     @Override\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
206     }\r
207 \r
208     @Override\r
209     public ResourceImpl getResource(int id) {\r
210         return new ResourceImpl(session.resourceSupport, id);\r
211     }\r
212 \r
213     @Override\r
214     public ResourceImpl getResource(int callerThread, int id) {\r
215         assert (id != 0);\r
216         return new ResourceImpl(session.resourceSupport, id);\r
217     }\r
218 \r
219     @Override\r
220     public Session getSession() {\r
221         return session;\r
222     }\r
223 \r
224     @Override\r
225     public IClusterTable getClusterTable() {\r
226         return clusterTable;\r
227     }\r
228 \r
229 }\r