--- /dev/null
+package fi.vtt.simantics.procore.internal;\r
+\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.db.impl.ClusterI;\r
+import org.simantics.db.impl.ClusterTraitsBase;\r
+import org.simantics.db.impl.ResourceImpl;\r
+import org.simantics.db.procore.cluster.ClusterImpl;\r
+import org.simantics.db.service.ClusterBuilder;\r
+import org.simantics.db.service.ClusterUID;\r
+\r
+import fi.vtt.simantics.procore.internal.SessionImplSocket.WriteOnlySupport;\r
+\r
+public class ClusterBuilderImpl implements ClusterBuilder {\r
+ \r
+ final private ClusterTable clusterTable;\r
+ final private ClusterStream stream;\r
+ final private WriteOnlySupport support;\r
+ \r
+ ClusterBuilderImpl(SessionImplSocket session, WriteOnlySupport support) {\r
+ this.support = support;\r
+ this.stream = support.stream;\r
+ this.clusterTable = session.clusterTable;\r
+ }\r
+\r
+ @Override\r
+ public void newCluster() throws DatabaseException {\r
+ support.flushCluster();\r
+ }\r
+ \r
+ @Override\r
+ public ResourceHandle newResource() throws DatabaseException {\r
+ return new ResourceHandleImpl(support);\r
+ }\r
+ \r
+ @Override\r
+ public ResourceHandle resource(Resource res) throws DatabaseException {\r
+ ResourceImpl r = (ResourceImpl)res;\r
+ int clusterKey = ClusterTraitsBase.getClusterKeyFromResourceKey(r.id);\r
+ ClusterI cluster = clusterTable.getClusterByClusterKey(clusterKey);\r
+ return new ResourceHandleImpl(stream, (ClusterImpl)cluster, r.id);\r
+ }\r
+\r
+ @Override\r
+ public StatementHandle newStatement(ResourceHandle predicate, ResourceHandle object) throws DatabaseException {\r
+ ResourceHandleImpl p = (ResourceHandleImpl)predicate;\r
+ ResourceHandleImpl o = (ResourceHandleImpl)object;\r
+ int pResourceIndex = ClusterTraitsBase.getResourceIndexFromResourceKey(p.resourceKey);\r
+ ClusterI pCluster = clusterTable.getClusterByClusterKey(pResourceIndex);\r
+ ClusterUID pClusterUID = pCluster.getClusterUID();\r
+ int oResourceIndex = ClusterTraitsBase.getResourceIndexFromResourceKey(p.resourceKey);\r
+ ClusterI oCluster = clusterTable.getClusterByClusterKey(oResourceIndex);\r
+ ClusterUID oClusterUID = oCluster.getClusterUID();\r
+ return new StatementHandleImpl(p.resourceKey, (byte)0, o.resourceKey, (byte)0, pClusterUID, oClusterUID);\r
+ }\r
+\r
+}\r