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); } @SuppressWarnings("unchecked") @Override public DiagramSettings perform(ReadGraph graph) throws DatabaseException { DiagramResource DIA = DiagramResource.getInstance(graph); DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph); Function1 arrowLengthProperty = null; double arrowLengthGain = 1; double arrowLengthBias = 0; Resource diagram = graph.getPossibleObject(resource, DIA.RuntimeDiagram_HasConfiguration); if (diagram != null) { Variable dv = Variables.getPossibleVariable(graph, diagram); Resource alp = graph.getPossibleObject(diagram, DN.Diagram_arrowLengthProperty); //System.out.println("alp: " + NameUtils.getURIOrSafeNameInternal(graph, alp)); if (alp != null) { Variable alpv = Variables.getPossibleVariable(graph, alp); if (alpv != null) { //System.out.println("alpv: " + alpv.getURI(graph)); arrowLengthProperty = alpv.getPropertyValue(graph, DN.Edge_ArrowLengthProperty_value); } arrowLengthGain = safeDoubleProperty(graph, alp, DN.Edge_ArrowLengthProperty_gain, 1) * safeDoubleProperty(graph, diagram, DN.Diagram_arrowLengthGain, 1); arrowLengthBias = safeDoubleProperty(graph, alp, DN.Edge_ArrowLengthProperty_bias, 0) + safeDoubleProperty(graph, diagram, DN.Diagram_arrowLengthBias, 0); } } DiagramSettings ds = new DiagramSettings( arrowLengthProperty, arrowLengthGain, arrowLengthBias); //System.out.println("new diagram settings: " + ds); return ds; } private static float safeFloatProperty(ReadGraph graph, Resource r, Resource property, float defaultValue) throws DatabaseException { Float d = graph.getPossibleRelatedValue(r, property, Bindings.FLOAT); return d != null ? d : defaultValue; } 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; } private static float limit(float min, float max, float value) { return Math.max(min, Math.min(value, max)); } @SuppressWarnings("unused") private static double limit(double min, double max, double value) { return Math.max(min, Math.min(value, max)); } }