-package org.simantics.district.network.ui.adapters;\r
-\r
-import java.awt.geom.Rectangle2D;\r
-\r
-import org.simantics.district.network.ui.DistrictNetworkEdge;\r
-import org.simantics.district.network.ui.nodes.DistrictNetworkEdgeNode;\r
-import org.simantics.g2d.element.ElementClass;\r
-import org.simantics.g2d.element.ElementUtils;\r
-import org.simantics.g2d.element.IElement;\r
-import org.simantics.g2d.element.SceneGraphNodeKey;\r
-import org.simantics.g2d.element.handler.InternalSize;\r
-import org.simantics.g2d.element.handler.SceneGraph;\r
-import org.simantics.g2d.elementclass.connection.EdgeClass.FixedTransform;\r
-import org.simantics.scenegraph.g2d.G2DParentNode;\r
-import org.simantics.utils.datastructures.hints.IHintContext.Key;\r
-import org.simantics.utils.datastructures.hints.IHintContext.KeyOf;\r
-\r
-public class DistrictNetworkEdgeElement {\r
-\r
- public static final Key KEY_DN_EDGE = new KeyOf(DistrictNetworkEdge.class, "DN_EDGE");\r
- public static final Key KEY_DN_EDGE_NODE = new SceneGraphNodeKey(DistrictNetworkEdgeNode.class, "DN_EDGE_NODE");\r
- \r
- public static final ElementClass CLASS =\r
- ElementClass.compile(\r
- FixedTransform.INSTANCE,\r
- DNEdgeInternalSize.INSTANCE,\r
- DNEdgeSceneGraph.INSTANCE\r
- ).setId(DistrictNetworkEdgeElement.class.getSimpleName());\r
- \r
- static final class DNEdgeSceneGraph implements SceneGraph {\r
- \r
- public static final DNEdgeSceneGraph INSTANCE = new DNEdgeSceneGraph();\r
-\r
- private static final long serialVersionUID = 8894367073815556871L;\r
-\r
- @Override\r
- public void init(IElement edgeElement, G2DParentNode parent) {\r
- DistrictNetworkEdge edge = edgeElement.getHint(KEY_DN_EDGE);\r
- if (edge == null) {\r
- cleanup(edgeElement);\r
- } else {\r
- DistrictNetworkEdgeNode node = edgeElement.getHint(KEY_DN_EDGE_NODE);\r
- if (node == null) {\r
- node = parent.addNode(ElementUtils.generateNodeId(edgeElement), DistrictNetworkEdgeNode.class);\r
- edgeElement.setHint(KEY_DN_EDGE_NODE, node);\r
- }\r
- node.setDNEdge(edge);\r
- }\r
- }\r
-\r
- @Override\r
- public void cleanup(IElement edge) {\r
- ElementUtils.removePossibleNode(edge, KEY_DN_EDGE_NODE);\r
- edge.removeHint(KEY_DN_EDGE_NODE);\r
- }\r
- }\r
- \r
- static final class DNEdgeInternalSize implements InternalSize {\r
-\r
- private static final long serialVersionUID = -2725017034692179676L;\r
- \r
- public static final DNEdgeInternalSize INSTANCE = new DNEdgeInternalSize();\r
-\r
- @Override\r
- public Rectangle2D getBounds(IElement e, Rectangle2D size) {\r
- DistrictNetworkEdge edge = e.getHint(KEY_DN_EDGE);\r
- return edge.getBounds(size);\r
- }\r
- \r
- }\r
-}\r
+package org.simantics.district.network.ui.adapters;
+
+import java.awt.Color;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Rectangle2D;
+import java.util.Collection;
+import java.util.Collections;
+
+import org.simantics.district.network.ui.DistrictNetworkEdge;
+import org.simantics.district.network.ui.nodes.DistrictNetworkEdgeNode;
+import org.simantics.g2d.connection.handler.ConnectionHandler;
+import org.simantics.g2d.diagram.handler.Topology.Connection;
+import org.simantics.g2d.element.ElementClass;
+import org.simantics.g2d.element.ElementUtils;
+import org.simantics.g2d.element.IElement;
+import org.simantics.g2d.element.SceneGraphNodeKey;
+import org.simantics.g2d.element.handler.InternalSize;
+import org.simantics.g2d.element.handler.SceneGraph;
+import org.simantics.g2d.element.handler.impl.DefaultTransform;
+import org.simantics.g2d.element.handler.impl.SimpleElementLayers;
+import org.simantics.scenegraph.g2d.G2DParentNode;
+import org.simantics.utils.datastructures.hints.IHintContext.Key;
+import org.simantics.utils.datastructures.hints.IHintContext.KeyOf;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DistrictNetworkEdgeElement {
+
+ public static final Key KEY_DN_EDGE = new KeyOf(DistrictNetworkEdge.class, "DN_EDGE");
+ public static final Key KEY_DN_EDGE_NODE = new SceneGraphNodeKey(DistrictNetworkEdgeNode.class, "DN_EDGE_NODE");
+
+ public static final ElementClass CLASS =
+ ElementClass.compile(
+ DefaultTransform.INSTANCE,
+ DNEdgeInternalSize.INSTANCE,
+ DNEdgeSceneGraph.INSTANCE,
+ DNEdgeConnectionHandler.INSTANCE,
+ SimpleElementLayers.INSTANCE,
+ DistrictNetworkAdditionalColor.INSTANCE
+ ).setId(DistrictNetworkEdgeElement.class.getSimpleName());
+
+ static final class DNEdgeSceneGraph implements SceneGraph {
+
+ public static final DNEdgeSceneGraph INSTANCE = new DNEdgeSceneGraph();
+
+ private static final long serialVersionUID = 8894367073815556871L;
+
+ @Override
+ public void init(IElement edgeElement, G2DParentNode parent) {
+ DistrictNetworkEdge edge = edgeElement.getHint(KEY_DN_EDGE);
+ if (edge == null) {
+ cleanup(edgeElement);
+ } else {
+ DistrictNetworkEdgeNode node = edgeElement.getHint(KEY_DN_EDGE_NODE);
+ if (node == null) {
+ node = parent.addNode(ElementUtils.generateNodeId(edgeElement), DistrictNetworkEdgeNode.class);
+ edgeElement.setHint(KEY_DN_EDGE_NODE, node);
+ }
+
+ node.setColor(ElementUtils.getAdditionalColor(edgeElement, Color.BLUE));
+
+ node.setDNEdge(edge);
+ AffineTransform at = ElementUtils.getTransform(edgeElement);
+ if (at != null)
+ node.setTransform(at);
+ }
+ }
+
+ @Override
+ public void cleanup(IElement edge) {
+ ElementUtils.removePossibleNode(edge, KEY_DN_EDGE_NODE);
+ edge.removeHint(KEY_DN_EDGE_NODE);
+ }
+ }
+
+ static final class DNEdgeInternalSize implements InternalSize {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(DNEdgeInternalSize.class);
+
+ private static final long serialVersionUID = -2725017034692179676L;
+
+ public static final DNEdgeInternalSize INSTANCE = new DNEdgeInternalSize();
+
+ @Override
+ public Rectangle2D getBounds(IElement e, Rectangle2D size) {
+ DistrictNetworkEdge edge = e.getHint(KEY_DN_EDGE);
+ if (size == null)
+ size = new Rectangle2D.Double();
+ if (edge != null)
+ size.setFrame(DistrictNetworkEdgeNode.calculatePath(edge).getBounds2D());
+ else
+ LOGGER.debug("Element {} does not have edge!", e);
+
+ return size;
+ }
+ }
+
+ static class DNEdgeConnectionHandler implements ConnectionHandler {
+
+ private static final long serialVersionUID = -410377314637446238L;
+
+ public static final DNEdgeConnectionHandler INSTANCE = new DNEdgeConnectionHandler();
+
+ @Override
+ public Collection<IElement> getChildren(IElement connection, Collection<IElement> result) {
+ return Collections.emptyList();
+ }
+
+ @Override
+ public Collection<IElement> getBranchPoints(IElement connection, Collection<IElement> result) {
+ return Collections.emptyList();
+ }
+
+ @Override
+ public Collection<IElement> getSegments(IElement connection, Collection<IElement> result) {
+ return Collections.emptyList();
+ }
+
+ @Override
+ public Collection<Connection> getTerminalConnections(IElement connection, Collection<Connection> result) {
+ return Collections.emptyList();
+ }
+ }
+}