package org.simantics.district.network.profile; import org.simantics.databoard.Bindings; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.common.request.ResourceRead; import org.simantics.db.exception.DatabaseException; import org.simantics.db.layer0.variable.Variable; import org.simantics.db.layer0.variable.Variables; import org.simantics.diagram.stubs.DiagramResource; import org.simantics.district.network.ontology.DistrictNetworkResource; import org.simantics.scl.runtime.function.Function1; /** * @author Tuukka Lehtonen */ public class DiagramSettingsRequest extends ResourceRead { public DiagramSettingsRequest(Resource runtimeDiagram) { super(runtimeDiagram); } @Override public DiagramSettings perform(ReadGraph graph) throws DatabaseException { DiagramResource DIA = DiagramResource.getInstance(graph); DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph); Function1 edgeThicknessProperty = null; Function1 nodeScaleProperty = null; double edgeThicknessGain = 1; double edgeThicknessBias = 0; double nodeScaleGain = 1; double nodeScaleBias = 0; Resource diagram = graph.getPossibleObject(resource, DIA.RuntimeDiagram_HasConfiguration); if (diagram != null) { Resource etp = graph.getPossibleObject(diagram, DN.Diagram_edgeThicknessProperty); //System.out.println("etp: " + NameUtils.getURIOrSafeNameInternal(graph, etp)); if (etp != null) { Variable etpv = Variables.getPossibleVariable(graph, etp); if (etpv != null) { //System.out.println("etpv: " + etpv.getURI(graph)); edgeThicknessProperty = etpv.getPropertyValue(graph, DN.Edge_ThicknessProperty_value); } edgeThicknessGain = safeDoubleProperty(graph, etp, DN.Edge_ThicknessProperty_gain, 1) * safeDoubleProperty(graph, diagram, DN.Diagram_edgeThicknessGain, 1); edgeThicknessBias = safeDoubleProperty(graph, etp, DN.Edge_ThicknessProperty_bias, 0) + safeDoubleProperty(graph, diagram, DN.Diagram_edgeThicknessBias, 0); } Resource nsp = graph.getPossibleObject(diagram, DN.Diagram_nodeScaleProperty); if (nsp != null) { Variable nspv = Variables.getPossibleVariable(graph, nsp); if (nspv != null) { //System.out.println("nspv: " + nspv.getURI(graph)); nodeScaleProperty = nspv.getPropertyValue(graph, DN.Vertex_ScaleProperty_value); } nodeScaleGain = safeDoubleProperty(graph, nsp, DN.Vertex_ScaleProperty_gain, 1) * safeDoubleProperty(graph, diagram, DN.Diagram_nodeScaleGain, 1); nodeScaleBias = safeDoubleProperty(graph, nsp, DN.Vertex_ScaleProperty_bias, 0) + safeDoubleProperty(graph, diagram, DN.Diagram_nodeScaleBias, 0); } } DiagramSettings ds = new DiagramSettings( nodeScaleProperty, nodeScaleGain, nodeScaleBias, edgeThicknessProperty, edgeThicknessGain, edgeThicknessBias); //System.out.println("new diagram settings: " + ds); return ds; } private static double safeDoubleProperty(ReadGraph graph, Resource r, Resource property, double defaultValue) throws DatabaseException { Double d = graph.getPossibleRelatedValue(r, property, Bindings.DOUBLE); return d != null ? d : defaultValue; } }