package org.simantics.district.network.profile; import java.util.Optional; import org.simantics.db.Resource; import org.simantics.scl.runtime.function.Function1; /** * @author Tuukka Lehtonen */ public class DiagramSettings { public final Optional> vertexScaleProperty; public final double vertexScaleGain; public final double vertexScaleBias; public final Optional> edgeThicknessProperty; public final double edgeThicknessGain; public final double edgeThicknessBias; public final Optional> arrowLengthProperty; public final double arrowLengthGain; public final double arrowLengthBias; public final Optional> elementColoringFunction; public final float elementColoringGradientHue; public final float elementColoringGradientSaturation; public final transient ColorGradient coloringGradient; public DiagramSettings( Function1 vertexScaleProperty, double vertexScaleGain, double vertexScaleBias, Function1 edgeThicknessProperty, double edgeThicknessGain, double edgeThicknessBias, Function1 arrowLengthProperty, double arrowLengthGain, double arrowLengthBias, Function1 elementColoringFunction, float elementColoringGradientHue, float elementColoringGradientSaturation ) { this.vertexScaleProperty = Optional.ofNullable(vertexScaleProperty); this.vertexScaleGain = vertexScaleGain; this.vertexScaleBias = vertexScaleBias; this.edgeThicknessProperty = Optional.ofNullable(edgeThicknessProperty); this.edgeThicknessGain = edgeThicknessGain; this.edgeThicknessBias = edgeThicknessBias; this.arrowLengthProperty = Optional.ofNullable(arrowLengthProperty); this.arrowLengthGain = arrowLengthGain; this.arrowLengthBias = arrowLengthBias; this.elementColoringFunction = Optional.ofNullable(elementColoringFunction); this.elementColoringGradientHue = elementColoringGradientHue; this.elementColoringGradientSaturation = elementColoringGradientSaturation; this.coloringGradient = Colors.cached( Colors.hsvGradient( elementColoringGradientHue, elementColoringGradientSaturation) ); } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + edgeThicknessProperty.hashCode(); result = prime * result + arrowLengthProperty.hashCode(); long temp; temp = Double.doubleToLongBits(edgeThicknessGain); result = prime * result + (int) (temp ^ (temp >>> 32)); temp = Double.doubleToLongBits(edgeThicknessBias); result = prime * result + (int) (temp ^ (temp >>> 32)); temp = Double.doubleToLongBits(arrowLengthGain); result = prime * result + (int) (temp ^ (temp >>> 32)); temp = Double.doubleToLongBits(arrowLengthBias); result = prime * result + (int) (temp ^ (temp >>> 32)); result = prime * result + vertexScaleProperty.hashCode(); temp = Double.doubleToLongBits(vertexScaleGain); result = prime * result + (int) (temp ^ (temp >>> 32)); temp = Double.doubleToLongBits(vertexScaleBias); result = prime * result + (int) (temp ^ (temp >>> 32)); result = prime * result + elementColoringFunction.hashCode(); result = prime * result + Float.floatToIntBits(elementColoringGradientHue); result = prime * result + Float.floatToIntBits(elementColoringGradientSaturation); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; DiagramSettings other = (DiagramSettings) obj; if (!edgeThicknessProperty.equals(other.edgeThicknessProperty)) return false; if (Double.doubleToLongBits(edgeThicknessGain) != Double.doubleToLongBits(other.edgeThicknessGain)) return false; if (Double.doubleToLongBits(edgeThicknessBias) != Double.doubleToLongBits(other.edgeThicknessBias)) return false; if (!arrowLengthProperty.equals(other.arrowLengthProperty)) return false; if (Double.doubleToLongBits(arrowLengthGain) != Double.doubleToLongBits(other.arrowLengthGain)) return false; if (Double.doubleToLongBits(arrowLengthBias) != Double.doubleToLongBits(other.arrowLengthBias)) return false; if (!vertexScaleProperty.equals(other.vertexScaleProperty)) return false; if (Double.doubleToLongBits(vertexScaleGain) != Double.doubleToLongBits(other.vertexScaleGain)) return false; if (Double.doubleToLongBits(vertexScaleBias) != Double.doubleToLongBits(other.vertexScaleBias)) return false; if (!elementColoringFunction.equals(other.elementColoringFunction)) return false; if (Float.floatToIntBits(elementColoringGradientHue) != Float.floatToIntBits(other.elementColoringGradientHue)) return false; if (Float.floatToIntBits(elementColoringGradientSaturation) != Float.floatToIntBits(other.elementColoringGradientSaturation)) return false; return true; } @Override public String toString() { return String.format("DiagramSettings[%s * %f + %f - %s * %f + %f - %s * %f + %f - coloringFunction: %s, hue: %f, saturation: %f]", vertexScaleProperty.toString(), vertexScaleGain, vertexScaleBias, edgeThicknessProperty, edgeThicknessGain, edgeThicknessBias, arrowLengthProperty, arrowLengthGain, arrowLengthBias, elementColoringFunction.toString(), elementColoringGradientHue, elementColoringGradientSaturation ); } }