]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.network/src/org/simantics/district/network/DistrictNetworkUtil.java
Some more added functionality to simantics district editor etc
[simantics/district.git] / org.simantics.district.network / src / org / simantics / district / network / DistrictNetworkUtil.java
index 25503407e66f38f83b49d26dbdcd2334ccd59893..9bdec1b590367107660947593d32e122d6cddf98 100644 (file)
@@ -1,36 +1,64 @@
-package org.simantics.district.network;\r
-\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.WriteGraph;\r
-import org.simantics.db.common.utils.OrderedSetUtils;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.diagram.stubs.DiagramResource;\r
-import org.simantics.district.network.ontology.DistrictNetworkResource;\r
-import org.simantics.layer0.Layer0;\r
-\r
-public class DistrictNetworkUtil {\r
-\r
-    public static Resource createEdge(WriteGraph graph, Resource composite) throws DatabaseException {\r
-        Layer0 L0 = Layer0.getInstance(graph);\r
-        DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph);\r
-        \r
-        Resource edge = graph.newResource();\r
-        graph.claim(edge, L0.InstanceOf, DN.Edge);\r
-        OrderedSetUtils.addFirst(graph, composite, edge);\r
-        graph.claim(composite, L0.ConsistsOf, L0.PartOf, edge);\r
-        return edge;\r
-    }\r
-    \r
-    public static Resource createVertex(WriteGraph graph, Resource composite, double[] coords) throws DatabaseException {\r
-        Layer0 L0 = Layer0.getInstance(graph);\r
-        DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph);\r
-        DiagramResource DIA = DiagramResource.getInstance(graph);\r
-        Resource vertex = graph.newResource();\r
-        graph.claim(vertex, L0.InstanceOf, DN.Vertex);\r
-        graph.claimLiteral(vertex, DIA.HasLocation, coords);\r
-        OrderedSetUtils.addFirst(graph, composite, vertex);\r
-        graph.claim(composite, L0.ConsistsOf, L0.PartOf, vertex);\r
-        \r
-        return vertex;\r
-    }\r
-}\r
+package org.simantics.district.network;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.simantics.db.Resource;
+import org.simantics.db.WriteGraph;
+import org.simantics.db.common.utils.OrderedSetUtils;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.layer0.util.RemoverUtil;
+import org.simantics.diagram.stubs.DiagramResource;
+import org.simantics.district.network.ontology.DistrictNetworkResource;
+import org.simantics.layer0.Layer0;
+
+public class DistrictNetworkUtil {
+
+    public static Resource createEdge(WriteGraph graph, Resource composite) throws DatabaseException {
+        Layer0 L0 = Layer0.getInstance(graph);
+        DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph);
+        
+        Resource edge = graph.newResource();
+        graph.claim(edge, L0.InstanceOf, DN.Edge);
+        OrderedSetUtils.add(graph, composite, edge);
+        graph.claim(composite, L0.ConsistsOf, L0.PartOf, edge);
+        return edge;
+    }
+    
+    public static Resource createVertex(WriteGraph graph, Resource composite, double[] coords) throws DatabaseException {
+        Layer0 L0 = Layer0.getInstance(graph);
+        DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph);
+        DiagramResource DIA = DiagramResource.getInstance(graph);
+        Resource vertex = graph.newResource();
+        graph.claim(vertex, L0.InstanceOf, DN.Vertex);
+        graph.claimLiteral(vertex, DIA.HasLocation, coords);
+        OrderedSetUtils.add(graph, composite, vertex);
+        graph.claim(composite, L0.ConsistsOf, L0.PartOf, vertex);
+        
+        return vertex;
+    }
+    
+    public static Resource joinVertices(WriteGraph graph, Collection<Resource> vertices) throws DatabaseException {
+        if (vertices.isEmpty())
+            throw new IllegalArgumentException("vertices-collection should not be empty for joining vertices!");
+        DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph);
+        Iterator<Resource> verticeIterator = vertices.iterator();
+        Resource master = verticeIterator.next();
+        while (verticeIterator.hasNext()) {
+            Resource slave = verticeIterator.next();
+            Resource composite = graph.getSingleObject(slave, Layer0.getInstance(graph).PartOf);
+            Collection<Resource> startVertexEdges = graph.getObjects(slave, DN.HasStartVertex_Inverse);
+            for (Resource startVertexEdge : startVertexEdges) {
+                graph.deny(startVertexEdge, DN.HasStartVertex);
+                graph.claim(startVertexEdge, DN.HasStartVertex, master);
+            }
+            Collection<Resource> endVertexEdges = graph.getObjects(slave, DN.HasEndVertex_Inverse);
+            for (Resource endVertexEdge : endVertexEdges) {
+                graph.deny(endVertexEdge, DN.HasEndVertex);
+                graph.claim(endVertexEdge, DN.HasEndVertex, master);
+            }
+            OrderedSetUtils.remove(graph, composite, slave);
+        }
+        return master;
+    }
+}