X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.district.network%2Fsrc%2Forg%2Fsimantics%2Fdistrict%2Fnetwork%2Fprofile%2FVertexSymbolStyle.java;h=96ff439235971ec19438150e36ff8f2cb019b68b;hb=5ef17426c5fb415e0e536d70ea870db90938ebe6;hp=98078f82f0ada9ebc70149801f2e6051109e9d4d;hpb=131b4e3b018ad0537d38c0aa83dd3e823ebe8e95;p=simantics%2Fdistrict.git diff --git a/org.simantics.district.network/src/org/simantics/district/network/profile/VertexSymbolStyle.java b/org.simantics.district.network/src/org/simantics/district/network/profile/VertexSymbolStyle.java index 98078f82..96ff4392 100644 --- a/org.simantics.district.network/src/org/simantics/district/network/profile/VertexSymbolStyle.java +++ b/org.simantics.district.network/src/org/simantics/district/network/profile/VertexSymbolStyle.java @@ -1,31 +1,50 @@ package org.simantics.district.network.profile; +import org.simantics.Simantics; import org.simantics.db.ReadGraph; 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.PendingVariableException; import org.simantics.district.network.ontology.DistrictNetworkResource; +import org.simantics.layer0.Layer0; import org.simantics.scenegraph.INode; import org.simantics.scenegraph.g2d.G2DSceneGraph; import org.simantics.scenegraph.g2d.nodes.SingleElementNode; import org.simantics.scenegraph.profile.EvaluationContext; import org.simantics.scenegraph.profile.common.ProfileVariables; import org.simantics.scl.runtime.function.Function; +import org.simantics.scl.runtime.function.FunctionImpl1; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class VertexSymbolStyle extends ThrottledStyleBase { + private static final Logger LOGGER = LoggerFactory.getLogger(VertexSymbolStyle.class); + @SuppressWarnings({ "rawtypes", "unchecked" }) @Override public String calculateThrottledStyle(ReadGraph graph, Resource runtimeDiagram, Resource entry, Resource groupItem) throws DatabaseException { - DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph); - Resource symbolFunctionResource = graph.getPossibleObject(entry, DN.HasSymbolFunction); - if (symbolFunctionResource == null) - return null; - - Function symbolFunction = (Function) graph.getPossibleValue2(symbolFunctionResource, null); + + Function symbolFunction = getSymbolFunction(graph, entry); if (symbolFunction == null) return null; - return (String) symbolFunction.apply(graph, entry); + try { + return (String) Simantics.applySCLRead(graph, symbolFunction, groupItem); + } catch (PendingVariableException e) { + throw e; + } catch (Exception e) { + LOGGER.error("Getting dynamic symbol for " + groupItem + " (" + graph.getPossibleRelatedValue(groupItem, Layer0.getInstance(graph).HasName) + ") failed", e); + return null; + } + } + + @SuppressWarnings("rawtypes") + protected static Function getSymbolFunction(ReadGraph graph, Resource entry) throws DatabaseException { + // Cache function read for profile entry + return graph.syncRequest(new SymbolFunctionRequest(entry), TransientCacheListener.instance()); } @Override @@ -43,4 +62,29 @@ public class VertexSymbolStyle extends ThrottledStyleBase { ProfileVariables.claimNodeProperty(nn, "SVG", null, evaluationContext); } + @SuppressWarnings("rawtypes") + protected static final class SymbolFunctionRequest extends ResourceRead { + protected static final Function CONST_NULL = new FunctionImpl1() { + @Override + public String apply(Resource p0) { + return null; + } + }; + + public SymbolFunctionRequest(Resource entry) { + super(entry); + } + + @Override + public Function perform(ReadGraph graph) throws DatabaseException { + DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph); + + Function symbolFunction = (Function) graph.getPossibleRelatedValue2(resource, DN.HasSymbolFunction, resource); + if (symbolFunction == null) + symbolFunction = CONST_NULL; + + return symbolFunction; + } + } + }