X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.district.network.ui%2Fsrc%2Forg%2Fsimantics%2Fdistrict%2Fnetwork%2Fui%2Fstyles%2FDistrictNetworkStaticInfoStyle.java;fp=org.simantics.district.network.ui%2Fsrc%2Forg%2Fsimantics%2Fdistrict%2Fnetwork%2Fui%2Fstyles%2FDistrictNetworkStaticInfoStyle.java;h=ebdc01418e848423c3d3f30b0fd3f4a3f38251c8;hb=2333f640dbaab4148fab8130515374aec9a27d9f;hp=ad72279772c94321c8e82de362492414464e0125;hpb=7e17143c72db32ba32f67f735d2394156589557d;p=simantics%2Fdistrict.git diff --git a/org.simantics.district.network.ui/src/org/simantics/district/network/ui/styles/DistrictNetworkStaticInfoStyle.java b/org.simantics.district.network.ui/src/org/simantics/district/network/ui/styles/DistrictNetworkStaticInfoStyle.java index ad722797..ebdc0141 100644 --- a/org.simantics.district.network.ui/src/org/simantics/district/network/ui/styles/DistrictNetworkStaticInfoStyle.java +++ b/org.simantics.district.network.ui/src/org/simantics/district/network/ui/styles/DistrictNetworkStaticInfoStyle.java @@ -1,6 +1,7 @@ package org.simantics.district.network.ui.styles; import java.awt.geom.Point2D; +import java.util.Objects; import java.util.Set; import org.simantics.Simantics; @@ -49,55 +50,76 @@ public class DistrictNetworkStaticInfoStyle extends StyleBase types = graph.getTypes(mapElement); + boolean isEdge = types.contains(DN.Edge); + boolean isVertex = types.contains(DN.Vertex); if (!isEdge && !isVertex) return null; - + if (isEdge) { Resource diagram = graph.getSingleObject(mapElement, Layer0.getInstance(graph).PartOf); Set edgesToUse = graph.syncRequest(new MidBranchEdgeSetRequest(diagram), TransientCacheListener.instance()); if (!edgesToUse.contains(mapElement)) return null; } - - DiagramResource DIA = DiagramResource.getInstance(graph); - StructuralResource2 STR = StructuralResource2.getInstance(graph); - + Resource module = DistrictNetworkUtil.getMappedComponentCached(graph, mapElement); if (module == null) return null; + StructuralResource2 STR = StructuralResource2.getInstance(graph); Resource moduleType = graph.getPossibleType(module, STR.Component); if (moduleType == null) return null; - + Function1 function = getUCPipelineInfoFunctionCached(graph, moduleType); if (function == null) return null; - + String result; try { Variable variable = Variables.getVariable(graph, module); @@ -109,76 +131,61 @@ public class DistrictNetworkStaticInfoStyle extends StyleBase"; + // the requested variable is missing from the UC + String message = e.getMessage(); + LOGGER.warn("Missing variable for calculating style with function {} {}", function, message); + result = "<" + message + ">"; } - + if (isVertex) { + DiagramResource DIA = DiagramResource.getInstance(graph); double[] coords = graph.getRelatedValue(mapElement, DIA.HasLocation); Point2D p = DistrictNetworkNodeUtils.calculatePoint2D(new Point2D.Double(coords[0], coords[1]), null); - return new StyleResult(p, p, result); - } - else if (isEdge) { - Resource v1 = graph.getSingleObject(mapElement, DN.HasStartVertex); - double[] coords1 = graph.getRelatedValue(v1, DIA.HasLocation); - Resource v2 = graph.getSingleObject(mapElement, DN.HasEndVertex); - double[] coords2 = graph.getRelatedValue(v2, DIA.HasLocation); - Point2D p1 = DistrictNetworkNodeUtils.calculatePoint2D(new Point2D.Double(coords1[0], coords1[1]), null); - Point2D p2 = DistrictNetworkNodeUtils.calculatePoint2D(new Point2D.Double(coords2[0], coords2[1]), null); - - return new StyleResult(p1, p2, result); + return new StyleResult(mapElement, p, result); + } else if (isEdge) { + return new StyleResult(mapElement, EDGE, result); } - return null; } - + @Override public void applyStyleForNode(EvaluationContext evaluationContext, INode parent, StyleResult result) { if (result == null) { cleanupStyleForNode(evaluationContext, parent); return; } - + ParentNode root = (ParentNode) NodeUtil.getNearestParentOfType(parent, RTreeNode.class); if (root != null) { DeferredRenderingNode deferred = ProfileVariables.claimChild(root, "", STATIC_INFO_DEFERRED, DeferredRenderingNode.class, evaluationContext); deferred.setZIndex(Integer.MAX_VALUE-1); } - + DistrictNetworkStaticInfoNode node = ProfileVariables.claimChild(parent, "*", DistrictNetworkStaticInfoNode.NODE_KEY, DistrictNetworkStaticInfoNode.class, evaluationContext); if (node == null) return; Point2D p1 = result.p1; - Point2D p2 = result.p2; - - if (p1.equals(p2)) { + if (p1 != EDGE) { node.setLocation(p1, new Point2D.Double(1.0, 0.0)); - } - else { - double sign = Math.signum(p1.getX() - p2.getX()); - Point2D.Double origin = new Point2D.Double(0.5 * (p1.getX() + p2.getX()), 0.5 * (p1.getY() + p2.getY())); - Point2D direction = new Point2D.Double(0.5 * sign * (p1.getX() - p2.getX()), 0.5 * sign * (p1.getY() - p2.getY())); - - node.setLocation(origin, direction); - + } else { + // StaticInfoNode takes care of positioning the text during render + // based on the found DistrictNetworkEdgeNode's information. for (IG2DNode n : ((ConnectionNode)parent).getNodes()) { if (n instanceof DistrictNetworkEdgeNode) { node.setEdgeNode((DistrictNetworkEdgeNode) n); } } } - + node.setInfo(result.info); } - + private static Function1 getUCPipelineInfoFunctionCached(ReadGraph graph, Resource componentType) throws DatabaseException { return graph.syncRequest(new UCPipelineInfoRequest(componentType), TransientCacheListener.instance()); } - + private static final class UCPipelineInfoRequest extends ResourceRead> { public UCPipelineInfoRequest(Resource resource) { super(resource); @@ -190,7 +197,7 @@ public class DistrictNetworkStaticInfoStyle extends StyleBase