]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.procore/src/fi/vtt/simantics/procore/internal/ClusterBuilderImpl.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.db.procore / src / fi / vtt / simantics / procore / internal / ClusterBuilderImpl.java
diff --git a/bundles/org.simantics.db.procore/src/fi/vtt/simantics/procore/internal/ClusterBuilderImpl.java b/bundles/org.simantics.db.procore/src/fi/vtt/simantics/procore/internal/ClusterBuilderImpl.java
new file mode 100644 (file)
index 0000000..f38b8cb
--- /dev/null
@@ -0,0 +1,57 @@
+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