-package org.simantics.district.network.ui.adapters;\r
-\r
-import org.simantics.db.AsyncReadGraph;\r
-import org.simantics.db.ReadGraph;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.db.procedure.AsyncProcedure;\r
-import org.simantics.diagram.adapter.SyncElementFactory;\r
-import org.simantics.diagram.stubs.DiagramResource;\r
-import org.simantics.district.network.ontology.DistrictNetworkResource;\r
-import org.simantics.g2d.canvas.ICanvasContext;\r
-import org.simantics.g2d.diagram.IDiagram;\r
-import org.simantics.g2d.element.ElementClass;\r
-import org.simantics.g2d.element.IElement;\r
-import org.simantics.g2d.element.handler.impl.StaticObjectAdapter;\r
-\r
-public class DistrictNetworkVertexElementFactory extends SyncElementFactory {\r
-\r
- public static final ElementClass CLASS = DistrictNetworkVertexElement.CLASS;\r
- private DistrictNetworkResource DN;\r
- private DiagramResource DIA;\r
-\r
- public DistrictNetworkVertexElementFactory(ReadGraph graph) {\r
- this.DN = DistrictNetworkResource.getInstance(graph);\r
- this.DIA = DiagramResource.getInstance(graph);\r
- }\r
-\r
- @Override\r
- public void create(AsyncReadGraph graph, ICanvasContext canvas, IDiagram diagram, Resource elementType,\r
- AsyncProcedure<ElementClass> procedure) {\r
- procedure.execute(graph, CLASS.newClassWith(false, new StaticObjectAdapter(elementType)));\r
- }\r
-\r
- @Override\r
- protected Resource getElementClassBaseType(AsyncReadGraph graph) {\r
- return DN.Vertex;\r
- }\r
-\r
- @Override\r
- public void load(ReadGraph graph, ICanvasContext canvas, IDiagram diagram, Resource vertexResource, IElement element) throws DatabaseException {\r
- \r
- double[] coords = graph.getRelatedValue(vertexResource, DIA.HasLocation);\r
- \r
- DistrictNetworkVertex vertex = new DistrictNetworkVertex(coords);\r
- \r
- element.setHint(DistrictNetworkVertexElement.KEY_DN_VERTEX, vertex);\r
- }\r
-}\r
+package org.simantics.district.network.ui.adapters;
+
+import java.awt.geom.AffineTransform;
+
+import org.simantics.db.AsyncReadGraph;
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.procedure.AsyncProcedure;
+import org.simantics.diagram.adapter.SyncElementFactory;
+import org.simantics.diagram.stubs.DiagramResource;
+import org.simantics.diagram.synchronization.IModifiableSynchronizationContext;
+import org.simantics.diagram.synchronization.SynchronizationHints;
+import org.simantics.diagram.synchronization.graph.GraphSynchronizationHints;
+import org.simantics.diagram.synchronization.graph.layer.GraphLayerManager;
+import org.simantics.district.network.ontology.DistrictNetworkResource;
+import org.simantics.g2d.canvas.ICanvasContext;
+import org.simantics.g2d.diagram.DiagramHints;
+import org.simantics.g2d.diagram.IDiagram;
+import org.simantics.g2d.element.ElementClass;
+import org.simantics.g2d.element.ElementUtils;
+import org.simantics.g2d.element.IElement;
+import org.simantics.g2d.element.handler.impl.StaticObjectAdapter;
+import org.simantics.g2d.layers.ILayersEditor;
+
+public class DistrictNetworkVertexElementFactory extends SyncElementFactory {
+
+ public static final ElementClass CLASS = DistrictNetworkVertexElement.CLASS;
+ private DistrictNetworkResource DN;
+ private DiagramResource DIA;
+
+ public DistrictNetworkVertexElementFactory(ReadGraph graph) {
+ this.DN = DistrictNetworkResource.getInstance(graph);
+ this.DIA = DiagramResource.getInstance(graph);
+ }
+
+ @Override
+ public void create(AsyncReadGraph graph, ICanvasContext canvas, IDiagram diagram, Resource elementType, AsyncProcedure<ElementClass> procedure) {
+ procedure.execute(graph, CLASS.newClassWith(false, new StaticObjectAdapter(elementType)));
+ }
+
+ @Override
+ protected Resource getElementClassBaseType(AsyncReadGraph graph) {
+ return DN.Vertex;
+ }
+
+ @Override
+ public void load(ReadGraph graph, ICanvasContext canvas, IDiagram diagram, Resource vertexResource, IElement element) throws DatabaseException {
+
+ double[] coords = graph.getRelatedValue(vertexResource, DIA.HasLocation);
+ DistrictNetworkVertex vertex = new DistrictNetworkVertex(coords);
+ element.setHint(DistrictNetworkVertexElement.KEY_DN_VERTEX, vertex);
+
+ // set element transform based on layer SRS and coords
+ AffineTransform at = new AffineTransform(1, 0, 0, 1, coords[0], coords[1]);
+ ElementUtils.setTransform(element, at);
+
+ IModifiableSynchronizationContext context = diagram.getHint(SynchronizationHints.CONTEXT);
+ GraphLayerManager layerManager = context.get(GraphSynchronizationHints.GRAPH_LAYER_MANAGER);
+
+ ILayersEditor layersEditor = diagram.getHint(DiagramHints.KEY_LAYERS_EDITOR);
+ layerManager.loadLayersForElement(graph, layersEditor, element, vertexResource);
+ }
+}