]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db.procore/src/fi/vtt/simantics/procore/internal/ResourceImpl.java
Merge commit 'a2a4242'
[simantics/platform.git] / bundles / org.simantics.db.procore / src / fi / vtt / simantics / procore / internal / ResourceImpl.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
3  * in Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package fi.vtt.simantics.procore.internal;\r
13 \r
14 \r
15 \r
16 //public abstract class ResourceImpl implements Resource {\r
17 //    public final static ResourceImpl[] NONE = new ResourceImpl[0];\r
18 //}\r
19 \r
20 //class ResourceProxy {\r
21 //    private final int offset;\r
22 //    private final int size;\r
23 //    private WeakReference<ResourceImpl> weakResource = null; \r
24 //    private ResourceImplModified modifiedResourceImpl = null;\r
25 //    private Value_ value;\r
26 //    ResourceProxy(int offset, int size) {\r
27 //        this.offset = offset;\r
28 //        this.size = size;\r
29 //    }\r
30 //    boolean isNew() {\r
31 //        return 0 == size;\r
32 //    }\r
33 //    private ResourceImpl getResourceImplModified(Cluster cluster, long subject) {\r
34 //        ResourceImpl r;\r
35 //        if (null == weakResource || null == (r = weakResource.get())) {\r
36 //            if (null == modifiedResourceImpl)\r
37 //                modifiedResourceImpl = new ResourceImplModified(cluster, offset, size, value);\r
38 //            r = new ResourceImpl(subject, modifiedResourceImpl);\r
39 //            weakResource = new WeakReference<ResourceImpl>(r); \r
40 //        } else if (!r.isModified()) {\r
41 //            if (null == modifiedResourceImpl)\r
42 //                modifiedResourceImpl = new ResourceImplModified(cluster, offset, size, value);\r
43 //            r.setImpl(modifiedResourceImpl);\r
44 //        }\r
45 //        return r;\r
46 //    }\r
47 //    void setValue(Value_ value) {\r
48 //        this.value = value;\r
49 //    }\r
50 //    ResourceImpl addRelation(Cluster cluster, long subject, long predicate, long predicateCluster, long object, long objectCluster) {\r
51 //        ResourceImpl r = getResourceImplModified(cluster, subject);\r
52 //        return r.addRelation(predicate, predicateCluster, object, objectCluster);\r
53 //    }\r
54 //    void removeRelation(Cluster cluster, long subject, long predicate, long predicateCluster, long object, long objectCluster) throws StatementNotFoundException {\r
55 //        ResourceImpl r = getResourceImplModified(cluster, subject);\r
56 //        r.removeRelation(predicate, predicateCluster, object, objectCluster);\r
57 //    }\r
58 //    ResourceImpl getResource(Cluster cluster, long id) {\r
59 //        ResourceImpl r;\r
60 //        if (null != weakResource) {\r
61 //            r = weakResource.get();\r
62 //            if (null != r)\r
63 //                return r;\r
64 //        }\r
65 //        if (isNew()) {\r
66 //            if (null == modifiedResourceImpl)\r
67 //                modifiedResourceImpl = new ResourceImplModified(cluster, offset, size, value);\r
68 //            r = new ResourceImpl(id, modifiedResourceImpl);\r
69 //        } else\r
70 //            r = new ResourceImpl(id, new ResourceImplFixed(cluster, offset, size, value));\r
71 //        weakResource = new WeakReference<ResourceImpl>(r); \r
72 //        return r;\r
73 //    }\r
74 //    ResourceImpl getResourceImpl(long id, ResourceImplModified impl) {\r
75 //        ResourceImpl r;\r
76 //        assert(null == modifiedResourceImpl);\r
77 //        assert(null == weakResource);\r
78 //        modifiedResourceImpl = impl;\r
79 //        r = new ResourceImpl(id, impl);\r
80 //        weakResource = new WeakReference<ResourceImpl>(r); \r
81 //        return r;\r
82 //    }\r
83 //    void release() {\r
84 //        if (null == weakResource)\r
85 //            return;\r
86 //        weakResource = null;\r
87 //        modifiedResourceImpl = null;\r
88 //    }\r
89 //}\r
90 //\r
91 //abstract class ResourceImplAbstract {\r
92 //    abstract void init(ResourceImpl self);\r
93 //    abstract void dispose();\r
94 //    abstract Value_ getValue(ResourceImpl self);\r
95 //    abstract long getClusterId();\r
96 //    abstract boolean isModified();\r
97 //    abstract int getNumberOfRelations(ResourceImpl self);\r
98 //    abstract StatementImpl[] getStatements(ResourceImpl self) throws ResourceNotFoundException;\r
99 //    abstract void addRelation(ResourceImpl self, long predicate, long predicateCluster, long object, long objectCluster);\r
100 //    abstract void removeRelation(long predicate, long predicateCluster, long object, long objectCluster) throws StatementNotFoundException;\r
101 //    abstract void addValue(ResourceImpl self, Value_ value); // TODO: Remove return value, inefficient.\r
102 //}\r
103 //\r
104 //abstract class ResourceImplCluster extends ResourceImplAbstract {\r
105 //    private Cluster cluster;\r
106 //    protected Value_ value;\r
107 //    protected Value_ valueOld = null;\r
108 //    protected Cluster getCluster() {\r
109 //        return cluster;\r
110 //    }\r
111 //    ResourceImplCluster(Cluster cluster) {\r
112 //        this.cluster = cluster;\r
113 //        cluster.incReferenceCount();\r
114 //    }\r
115 //    void setCluster(Cluster c) {\r
116 //        this.cluster = c;\r
117 //    }\r
118 //    @Override\r
119 //    void init(ResourceImpl self) {\r
120 //    }\r
121 //    @Override\r
122 //    void dispose() {\r
123 //        cluster.decReferenceCount();\r
124 //    }\r
125 //    @Override\r
126 //    long getClusterId() {\r
127 //        return cluster.getId();\r
128 //    }\r
129 //    @Override\r
130 //    Value_ getValue(ResourceImpl self) {\r
131 //        return value;\r
132 //    }\r
133 //    protected void setValue(Value_ value) {\r
134 //        this.value = this.valueOld = value;\r
135 //    }\r
136 //    void moveValue() {\r
137 //        valueOld = value;\r
138 //    }\r
139 //    void removeValue() {\r
140 //        value = valueOld;\r
141 //    }\r
142 //    void addValue(ResourceImpl self, Value_ value) { // TODO: Remove return value, inefficient.\r
143 //        this.value = value;\r
144 //    }\r
145 //}\r
146 //\r
147 //class ResourceImplFixed extends ResourceImplCluster {\r
148 //    final int fixedOffset;\r
149 //    final int fixedSize;\r
150 //    public ResourceImplFixed(Cluster cluster, int offset, int size, Value_ value) {\r
151 //        super(cluster);\r
152 //        this.fixedOffset = offset;\r
153 //        this.fixedSize = size;\r
154 //        setValue(value);\r
155 //    }\r
156 //    @Override\r
157 //    int getNumberOfRelations(ResourceImpl self) {\r
158 //        return fixedSize;\r
159 //    }\r
160 //    @Override\r
161 //    StatementImpl[] getStatements(ResourceImpl self) throws ResourceNotFoundException {\r
162 //        StatementImpl[] stms = new StatementImpl[fixedSize];\r
163 //        GraphSession gs = this.getCluster().client;\r
164 //        int end = fixedOffset + fixedSize;\r
165 //        for (int i=fixedOffset, j=0; i<end; ++i, ++j) {\r
166 //            ResourceImpl p = gs.getResourceOrThrow(getCluster().raw.predicates[i], getCluster().raw.predicateClusters[i]);\r
167 //            stms[j] = new StatementImplNew(self, p, getCluster().raw.objects[i], getCluster().raw.objectClusters[i], gs);\r
168 ////            ResourceImpl o = gs.getResourceOrThrow(getCluster().raw.objects[i], getCluster().raw.objectClusters[i]);\r
169 ////            stms[j] = new StatementImplOld(self, p, o);\r
170 //        }\r
171 //        return stms;\r
172 //    }\r
173 //    @Override\r
174 //    boolean isModified() {\r
175 //        return false;\r
176 //    }\r
177 //    @Override\r
178 //    void addRelation(ResourceImpl self, long predicate, long predicateCluster, long object, long objectCluster) {\r
179 //        throw new Error("Not allowed");\r
180 //    }\r
181 //    @Override\r
182 //    void removeRelation(long predicate, long predicateCluster, long object, long objectCluster) {\r
183 //        throw new Error("Not allowed");\r
184 //    }\r
185 //}\r
186 //\r
187 //class ResourceImplModifiedStatement {\r
188 //    long predicate;\r
189 //    long predicateCluster;\r
190 //    long object;\r
191 //    long objectCluster;\r
192 //    ResourceImplModifiedStatement(long predicate, long predicateCluster, long object, long objectCluster) {\r
193 //        this.predicate = predicate;\r
194 //        this.predicateCluster = predicateCluster;\r
195 //        this.object = object;\r
196 //        this.objectCluster = objectCluster;\r
197 //    }\r
198 //    @Override\r
199 //    public int hashCode() {\r
200 //        return (int)(object^(object>>32)^predicate^(predicate>>>32));\r
201 //    }\r
202 //    @Override\r
203 //    public boolean equals(Object obj) {\r
204 //        if (this == obj)\r
205 //            return true;\r
206 //        else if (obj == null)\r
207 //            return false;\r
208 //        else if (ResourceImplModifiedStatement.class != obj.getClass())\r
209 //            return false;\r
210 //        ResourceImplModifiedStatement d = (ResourceImplModifiedStatement)obj;\r
211 //        return (d.object == object) && (d.predicate == predicate);\r
212 //    }\r
213 //}\r
214 //\r
215 //class ResourceImplModified extends ResourceImplCluster {\r
216 //    static ResourceImplModifiedStatement findStatement = new ResourceImplModifiedStatement(0, 0, 0, 0);\r
217 //    THashSet<ResourceImplModifiedStatement> statements = new THashSet<ResourceImplModifiedStatement>();\r
218 //    THashSet<ResourceImplModifiedStatement> reclusteringStatements = new THashSet<ResourceImplModifiedStatement>();\r
219 //    public ResourceImplModified(Cluster cluster, int offset, int size, Value_ value) {\r
220 //        super(cluster);\r
221 //        setValue(value);\r
222 //        statements.ensureCapacity(size);\r
223 //        for (int i=0,j=offset; i<size; ++i,++j) {\r
224 //            assert(Constants.ReservedClusterId != cluster.raw.predicateClusters[j]);\r
225 //            assert(Constants.ReservedClusterId != cluster.raw.objectClusters[j]);\r
226 //            statements.add(new ResourceImplModifiedStatement(cluster.raw.predicates[j], cluster.raw.predicateClusters[j], cluster.raw.objects[j], cluster.raw.objectClusters[j]));\r
227 //        }\r
228 //    }\r
229 //    void moveStatements(HashMap<Long, Long> oldResourceIdToNewClusterIdMap) {\r
230 //        for (ResourceImplModifiedStatement s : reclusteringStatements) {\r
231 //            statements.remove(s);\r
232 //            if (Constants.ReservedClusterId == s.predicateCluster)\r
233 //                s.predicateCluster = oldResourceIdToNewClusterIdMap.get(s.predicate);\r
234 //            if (Constants.ReservedClusterId == s.objectCluster)\r
235 //                s.objectCluster = oldResourceIdToNewClusterIdMap.get(s.object);\r
236 //            statements.add(s);\r
237 //        }\r
238 //        reclusteringStatements.clear();\r
239 //    }\r
240 //\r
241 //    void removeStatements() {\r
242 //        for (ResourceImplModifiedStatement s : reclusteringStatements) {\r
243 //            statements.remove(s);\r
244 //        }\r
245 //        reclusteringStatements.clear();\r
246 //    }\r
247 //\r
248 //    @Override\r
249 //    int getNumberOfRelations(ResourceImpl self) {\r
250 //        return statements.size();\r
251 //    }\r
252 //    @Override\r
253 //    boolean isModified() {\r
254 //        return true; // HACK: This is not necessarily true. In creation no modifications given and modifications can cancel each other out.\r
255 //    }\r
256 //    @Override\r
257 //    StatementImpl[] getStatements(ResourceImpl self) throws ResourceNotFoundException {\r
258 //        int size = statements.size();\r
259 //        StatementImpl[] stms = new StatementImpl[size];\r
260 //        GraphSession gs = getCluster().client;\r
261 //        int i = -1;\r
262 //        for (ResourceImplModifiedStatement s : statements) {\r
263 //            ResourceImpl p;\r
264 //            if (Constants.ReservedClusterId == s.predicateCluster)\r
265 //                p = this.getCluster().getResourceReservedOrThrow(Constants.ReservedClusterId, s.predicate);\r
266 //            else\r
267 //                p = gs.getResourceOrThrow(s.predicate, s.predicateCluster);\r
268 //            if (Constants.ReservedClusterId == s.objectCluster) {\r
269 //                ResourceImpl o = this.getCluster().getResourceReservedOrThrow(Constants.ReservedClusterId, s.object);\r
270 //                stms[++i] = new StatementImplOld(self, p, o);\r
271 //            } else\r
272 //                stms[++i] = new StatementImplNew(self, p, s.object, s.objectCluster, gs);\r
273 //        }\r
274 //        return stms;\r
275 //    }\r
276 //    private boolean find(long predicate, long predicateCluster, long object, long objectCluster) {\r
277 //        findStatement.predicate = predicate;\r
278 //        findStatement.predicateCluster = predicateCluster;\r
279 //        findStatement.object = object;\r
280 //        findStatement.objectCluster = objectCluster;\r
281 //        return statements.contains(findStatement);\r
282 //    }\r
283 //    @Override\r
284 //    void addRelation(ResourceImpl self, long predicate, long predicateCluster, long object, long objectCluster) {\r
285 //        if (find(predicate, predicateCluster, object, objectCluster))\r
286 //            return;\r
287 //        //System.out.println(self + "." + getNumberOfRelations(self) + ": " + predicate + "." + predicateCluster + " " + object + "." + objectCluster);\r
288 //        ResourceImplModifiedStatement s = new ResourceImplModifiedStatement(predicate, predicateCluster, object, objectCluster);\r
289 //        statements.add(s);\r
290 //        if (Constants.ReservedClusterId == predicateCluster ||\r
291 //                Constants.ReservedClusterId == objectCluster) {\r
292 //            reclusteringStatements.add(s);\r
293 //            getCluster().addModifiedResource(self);\r
294 //        }\r
295 //    }\r
296 //    @Override\r
297 //    void removeRelation(long predicate, long predicateCluster, long object, long objectCluster) throws StatementNotFoundException {\r
298 //        findStatement.predicate = predicate;\r
299 //        findStatement.predicateCluster = predicateCluster;\r
300 //        findStatement.object = object;\r
301 //        findStatement.objectCluster = objectCluster;\r
302 //        if (!statements.remove(findStatement))\r
303 //            throw new StatementNotFoundException();\r
304 //        reclusteringStatements.remove(findStatement);\r
305 //    }\r
306 //}\r
307 //\r
308 //class ResourceImplChangeSet extends ResourceImplAbstract {\r
309 //    private SessionImplHistorical session;\r
310 //    private long cluster;\r
311 //    private ResourceImpl original;\r
312 //    public ResourceImplChangeSet(SessionImplHistorical session, long cluster) {\r
313 //        this.session = session;\r
314 //        this.cluster = cluster;\r
315 //    }\r
316 //    @Override\r
317 //    void init(ResourceImpl self) {\r
318 //        Cluster c = session.getCluster(cluster);\r
319 //        if (null != c)\r
320 //            this.original = c.getResource(self.id);\r
321 //    }\r
322 //    @Override\r
323 //    void dispose() {\r
324 //    }\r
325 //    @Override\r
326 //    long getClusterId() {\r
327 //        return cluster;\r
328 //    }\r
329 //    @Override\r
330 //    Value_ getValue(ResourceImpl self) {\r
331 //        Value_ value = null;\r
332 //        if (null != original)\r
333 //            value = original.getValue();\r
334 //        return session.getValue(self.id, value);\r
335 //    }\r
336 //    @Override\r
337 //    int getNumberOfRelations(ResourceImpl self) {\r
338 //        int n = 0;\r
339 //        if (null != original)\r
340 //            n = original.getNumberOfRelations();\r
341 //        n += session.getNumberOfAddedRelations(self.id);\r
342 //        n -= session.getNumberOfRemovedRelations(self.id);\r
343 //        return n;\r
344 //    }\r
345 //    @Override\r
346 //    StatementImpl[] getStatements(ResourceImpl self) throws ResourceNotFoundException {\r
347 //        StatementImpl[] stms = StatementImpl.NONE;\r
348 //        if (null != original)\r
349 //            stms = original.getStatements();\r
350 //        return session.getStatements(self.id, stms);\r
351 //    }\r
352 //    @Override\r
353 //    boolean isModified() {\r
354 //        return false;\r
355 //    }\r
356 //    @Override\r
357 //    void addValue(ResourceImpl self, Value_ value) {\r
358 //        throw new Error("Not allowed");\r
359 //    }\r
360 //    @Override\r
361 //    void addRelation(ResourceImpl self, long predicate, long predicateCluster, long object, long objectCluster) {\r
362 //        throw new Error("Not allowed");\r
363 //    }\r
364 //    @Override\r
365 //    void removeRelation(long predicate, long predicateCluster, long object, long objectCluster) {\r
366 //        throw new Error("Not allowed");\r
367 //    }\r
368 //}\r
369 //\r
370 //class ResourceImplClusterNew extends ResourceImplAbstract {\r
371 //    //private Cluster clusterOld;\r
372 //      private final long id;\r
373 //    private org.simantics.db.procore.cluster.Cluster cluster;\r
374 //    protected Cluster getCluster() {\r
375 //        throw new Error("No can do.");\r
376 //    }\r
377 //    ResourceImplClusterNew(long id, org.simantics.db.procore.cluster.Cluster cluster) {\r
378 //        this.id = id;\r
379 //        this.cluster = cluster;\r
380 //    }\r
381 //    final org.simantics.db.procore.cluster.Cluster getClusterNew() {\r
382 //      return cluster;\r
383 //    }\r
384 //    void setCluster(Cluster c) {\r
385 //        throw new Error("No can do.");\r
386 //    }\r
387 //    @Override\r
388 //    void init(ResourceImpl self) {\r
389 //    }\r
390 //    @Override\r
391 //    void dispose() {\r
392 //    }\r
393 //    @Override\r
394 //    long getClusterId() {\r
395 //        return cluster.getId();\r
396 //    }\r
397 //    @Override\r
398 //    Value_ getValue(ResourceImpl self) {\r
399 //      byte[] value = cluster.getValue(id);\r
400 //      return new Zany(value);\r
401 //    }\r
402 //    protected void setValue(Value_ value) {\r
403 //      throw new Error("No can do.");\r
404 //    }\r
405 //    void moveValue() {\r
406 //      throw new Error("No can do.");\r
407 //    }\r
408 //    void removeValue() {\r
409 //      throw new Error("No can do.");\r
410 //    }\r
411 //    void addValue(ResourceImpl self, Value_ value) { // TODO: Remove return value, inefficient.\r
412 //      throw new Error("No can do.");\r
413 //    }\r
414 //      @Override\r
415 //      void addRelation(ResourceImpl self, long predicate, long predicateCluster,\r
416 //                      long object, long objectCluster) {\r
417 //              throw new Error("No can do.");\r
418 //      }\r
419 //      @Override\r
420 //      int getNumberOfRelations(ResourceImpl self) {\r
421 //              throw new Error("No can do.");\r
422 //      }\r
423 //      @Override\r
424 //      StatementImpl[] getStatements(ResourceImpl self) {\r
425 //              throw new Error("No can do.");\r
426 //      }\r
427 //      @Override\r
428 //      boolean isModified() {\r
429 //              throw new Error("No can do.");\r
430 //      }\r
431 //      @Override\r
432 //      void removeRelation(long predicate, long predicateCluster, long object,\r
433 //                      long objectCluster) throws StatementNotFoundException {\r
434 //              throw new Error("No can do.");\r
435 //      }\r
436 //}\r