]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.network.ui/src/org/simantics/district/network/ui/participants/DNTranslateMode.java
Implement district features to Simantics platform
[simantics/district.git] / org.simantics.district.network.ui / src / org / simantics / district / network / ui / participants / DNTranslateMode.java
diff --git a/org.simantics.district.network.ui/src/org/simantics/district/network/ui/participants/DNTranslateMode.java b/org.simantics.district.network.ui/src/org/simantics/district/network/ui/participants/DNTranslateMode.java
new file mode 100644 (file)
index 0000000..74a4647
--- /dev/null
@@ -0,0 +1,83 @@
+package org.simantics.district.network.ui.participants;\r
+\r
+import java.awt.geom.AffineTransform;\r
+import java.awt.geom.Point2D;\r
+import java.util.ArrayList;\r
+import java.util.Collection;\r
+\r
+import org.simantics.Simantics;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.WriteGraph;\r
+import org.simantics.db.common.CommentMetadata;\r
+import org.simantics.db.common.request.WriteRequest;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.diagram.elements.ElementTransforms;\r
+import org.simantics.diagram.elements.ElementTransforms.TransformedObject;\r
+import org.simantics.diagram.stubs.DiagramResource;\r
+import org.simantics.district.network.ontology.DistrictNetworkResource;\r
+import org.simantics.g2d.canvas.Hints;\r
+import org.simantics.g2d.diagram.participant.pointertool.TranslateMode;\r
+import org.simantics.g2d.element.ElementUtils;\r
+import org.simantics.g2d.element.IElement;\r
+import org.simantics.g2d.element.handler.Move;\r
+\r
+public class DNTranslateMode extends TranslateMode {\r
+\r
+    public DNTranslateMode(Point2D startingPoint, Point2D currentPoint, int mouseId, Collection<IElement> elements) {\r
+        super(startingPoint, currentPoint, mouseId, elements);\r
+    }\r
+    \r
+    @Override\r
+    protected boolean commit() {\r
+        for (IElement el : elementsToReallyTranslate) {\r
+            Move move = el.getElementClass().getAtMostOneItemOfClass(Move.class);\r
+            if (move != null) {\r
+                Point2D oldPos = move.getPosition(el);\r
+                move.moveTo(el, oldPos.getX() + dx, oldPos.getY() + dy);\r
+            }\r
+        }\r
+        try {\r
+            Simantics.getSession().syncRequest(new WriteRequest() {\r
+                @Override\r
+                public void perform(WriteGraph graph) throws DatabaseException {\r
+                    Collection<TransformedObject> transformed = new ArrayList<TransformedObject>();\r
+                    DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph);\r
+                    DiagramResource DIA = DiagramResource.getInstance(graph);\r
+                    for (IElement e : elementsToReallyTranslate) {\r
+                        Object obj = ElementUtils.getObject(e);\r
+                        if (obj instanceof Resource) {\r
+                            Resource res = (Resource) obj;\r
+                            if (graph.isInstanceOf(res, DN.Vertex)) {\r
+                                AffineTransform at = ElementUtils.getLocalTransform(e, new AffineTransform());\r
+                                transformed.add( new TransformedObject((Resource) obj, at) );\r
+                                \r
+                                \r
+                                // write to db\r
+                                double[] coords = new double[] { at.getTranslateX(), at.getTranslateY() };\r
+                                graph.claimLiteral(res, DIA.HasLocation, coords);\r
+                            }\r
+                        }\r
+                    }\r
+                    \r
+                    if (!transformed.isEmpty()) {\r
+                        CommentMetadata cm = graph.getMetadata(CommentMetadata.class);\r
+                        graph.addMetadata(cm.add("Translated " + transformed.size() + " "\r
+                                + (transformed.size() == 1 ? "element" : "elements")\r
+                                + " by (" + dx + "," + dy + ") mm."));\r
+                        graph.markUndoPoint();\r
+                    }\r
+                }\r
+            });\r
+        } catch (DatabaseException e) {\r
+            e.printStackTrace();\r
+        }\r
+        \r
+        for (IElement dirty : elementsToDirty)\r
+            dirty.setHint(Hints.KEY_DIRTY, Hints.VALUE_SG_DIRTY);\r
+\r
+        setDirty();\r
+        remove();\r
+        return false;\r
+    }\r
+\r
+}\r