]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.network.ui/src/org/simantics/district/network/ui/styles/DistrictNetworkHoverInfoStyle.java
Necessary reverts and changes to build against release/1.35.2 platform
[simantics/district.git] / org.simantics.district.network.ui / src / org / simantics / district / network / ui / styles / DistrictNetworkHoverInfoStyle.java
index f01fa2aeece9cdd63dc1e340908307f98158399d..0694da06529f3867ddc0a78cf40a47bc785c00a0 100644 (file)
@@ -11,6 +11,7 @@ import org.simantics.db.Resource;
 import org.simantics.db.common.procedure.adapter.TransientCacheListener;
 import org.simantics.db.common.request.ResourceRead;
 import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.layer0.exception.MissingVariableException;
 import org.simantics.db.layer0.exception.MissingVariableValueException;
 import org.simantics.db.layer0.exception.PendingVariableException;
 import org.simantics.db.layer0.util.Layer0Utils;
@@ -20,22 +21,32 @@ import org.simantics.diagram.profile.StyleBase;
 import org.simantics.diagram.stubs.DiagramResource;
 import org.simantics.district.network.DistrictNetworkUtil;
 import org.simantics.district.network.ontology.DistrictNetworkResource;
+import org.simantics.district.network.ui.nodes.DeferredRenderingNode;
 import org.simantics.district.network.ui.nodes.DistrictNetworkHoverInfoNode;
 import org.simantics.district.network.ui.nodes.DistrictNetworkNodeUtils;
 import org.simantics.layer0.Layer0;
 import org.simantics.modeling.ModelingResources;
 import org.simantics.scenegraph.INode;
+import org.simantics.scenegraph.ParentNode;
+import org.simantics.scenegraph.g2d.nodes.spatial.RTreeNode;
 import org.simantics.scenegraph.profile.EvaluationContext;
 import org.simantics.scenegraph.profile.common.ProfileVariables;
+import org.simantics.scenegraph.utils.NodeUtil;
 import org.simantics.scl.compiler.top.ValueNotFound;
 import org.simantics.scl.osgi.SCLOsgi;
 import org.simantics.scl.runtime.SCLContext;
 import org.simantics.scl.runtime.function.Function1;
 import org.simantics.scl.runtime.tuple.Tuple3;
 import org.simantics.structural.stubs.StructuralResource2;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class DistrictNetworkHoverInfoStyle extends StyleBase<DistrictNetworkHoverInfoStyle.StyleResult> {
 
+    public static final String HOVER_INFO_DEFERRED = "hoverInfo";
+
+       private static final Logger LOGGER = LoggerFactory.getLogger(DistrictNetworkHoverInfoStyle.class);
+
        private static final String ACTIONS_MODULE = "Actions";
        private static final String HOVER_CONTRIBUTION = "hoverContribution";
 
@@ -58,7 +69,7 @@ public class DistrictNetworkHoverInfoStyle extends StyleBase<DistrictNetworkHove
        }
        
        public DistrictNetworkHoverInfoStyle(Resource style) throws DatabaseException {
-               super(style);
+               super();
        }
        
        String currentRowKey;
@@ -104,7 +115,12 @@ public class DistrictNetworkHoverInfoStyle extends StyleBase<DistrictNetworkHove
                        result = Simantics.applySCLRead(graph, function, moduleVariable);
                } catch (PendingVariableException | MissingVariableValueException e) {
                        result = Collections.singletonList(new Tuple3("<pending>", "", ""));
-               }
+               } catch (MissingVariableException e) {
+            // the requested variable is missing from the UC
+            String message = e.getMessage();
+            LOGGER.warn("Missing variable for calculating style with function {} {}", function, message);
+            result = Collections.singletonList(new Tuple3("<" + message +">", "", ""));
+        }
                
                Point2D point;
                DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph);
@@ -137,6 +153,12 @@ public class DistrictNetworkHoverInfoStyle extends StyleBase<DistrictNetworkHove
                if (node == null)
                        return;
                
+               ParentNode<?> root = (ParentNode<?>) NodeUtil.getNearestParentOfType(parent, RTreeNode.class);
+               if (root != null) {
+                       DeferredRenderingNode deferred = ProfileVariables.claimChild(root, "", HOVER_INFO_DEFERRED, DeferredRenderingNode.class, observer);
+                       deferred.setZIndex(Integer.MAX_VALUE);
+               }
+               
                node.setLabels(results.getLabels());
                node.setOrigin(results.getOrigin());
        }