--- /dev/null
+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