1 package fi.vtt.simantics.procore.internal;
\r
3 import org.simantics.db.Resource;
\r
4 import org.simantics.db.exception.DatabaseException;
\r
5 import org.simantics.db.impl.ClusterI;
\r
6 import org.simantics.db.impl.ClusterTraitsBase;
\r
7 import org.simantics.db.impl.ResourceImpl;
\r
8 import org.simantics.db.procore.cluster.ClusterImpl;
\r
9 import org.simantics.db.service.ClusterBuilder;
\r
10 import org.simantics.db.service.ClusterUID;
\r
12 import fi.vtt.simantics.procore.internal.SessionImplSocket.WriteOnlySupport;
\r
14 public class ClusterBuilderImpl implements ClusterBuilder {
\r
16 final private ClusterTable clusterTable;
\r
17 final private ClusterStream stream;
\r
18 final private WriteOnlySupport support;
\r
20 ClusterBuilderImpl(SessionImplSocket session, WriteOnlySupport support) {
\r
21 this.support = support;
\r
22 this.stream = support.stream;
\r
23 this.clusterTable = session.clusterTable;
\r
27 public void newCluster() throws DatabaseException {
\r
28 support.flushCluster();
\r
32 public ResourceHandle newResource() throws DatabaseException {
\r
33 return new ResourceHandleImpl(support);
\r
37 public ResourceHandle resource(Resource res) throws DatabaseException {
\r
38 ResourceImpl r = (ResourceImpl)res;
\r
39 int clusterKey = ClusterTraitsBase.getClusterKeyFromResourceKey(r.id);
\r
40 ClusterI cluster = clusterTable.getClusterByClusterKey(clusterKey);
\r
41 return new ResourceHandleImpl(stream, (ClusterImpl)cluster, r.id);
\r
45 public StatementHandle newStatement(ResourceHandle predicate, ResourceHandle object) throws DatabaseException {
\r
46 ResourceHandleImpl p = (ResourceHandleImpl)predicate;
\r
47 ResourceHandleImpl o = (ResourceHandleImpl)object;
\r
48 int pResourceIndex = ClusterTraitsBase.getResourceIndexFromResourceKey(p.resourceKey);
\r
49 ClusterI pCluster = clusterTable.getClusterByClusterKey(pResourceIndex);
\r
50 ClusterUID pClusterUID = pCluster.getClusterUID();
\r
51 int oResourceIndex = ClusterTraitsBase.getResourceIndexFromResourceKey(p.resourceKey);
\r
52 ClusterI oCluster = clusterTable.getClusterByClusterKey(oResourceIndex);
\r
53 ClusterUID oClusterUID = oCluster.getClusterUID();
\r
54 return new StatementHandleImpl(p.resourceKey, (byte)0, o.resourceKey, (byte)0, pClusterUID, oClusterUID);
\r