package jalview.ws.params.simple; import jalview.ws.params.ParameterI; import jalview.ws.params.ValueConstrainI; import static java.util.Objects.requireNonNullElse; /** * * @author TZVanaalten * */ public class DoubleParameter extends Option implements ParameterI { public static class Builder extends Option.Builder { // setting them the opposite way disables limits until both are set. protected double min = Double.POSITIVE_INFINITY; protected double max = Double.NEGATIVE_INFINITY; /** * Setting string on double parameter is not allowed, use * {@link #setValue(Double)} instead. */ @Override public void setValue(String value) { throw new UnsupportedOperationException(); } public void setValue(Double value) { if (value != null) super.setValue(value.toString()); else super.setValue(null); } /** * Setting string on double parameter is not allowed, use * {@link #setDefaultValue(Double)} instead. */ @Override public void setDefaultValue(String defaultValue) { throw new UnsupportedOperationException(); } public void setDefaultValue(Double defaultValue) { if (defaultValue != null) super.setDefaultValue(defaultValue.toString()); else super.setDefaultValue(null); } public void setMin(Double min) { this.min = requireNonNullElse(min, Double.POSITIVE_INFINITY); } public void setMax(Double max) { this.max = requireNonNullElse(max, Double.NEGATIVE_INFINITY); } public void setBounds(Double min, Double max) { setMin(min); setMax(max); } public DoubleParameter build() { return new DoubleParameter(this); } } public static Builder newBuilder() { return new Builder(); } double defval; double min; double max; @Override public ValueConstrainI getValidValue() { return new ValueConstrainI() { @Override public ValueType getType() { return ValueType.Double; } @Override public Number getMin() { return min < max ? min : null; } @Override public Number getMax() { return min < max ? max : null; } }; } protected DoubleParameter(Builder builder) { super(builder); this.min = builder.min; this.max = builder.max; if (defvalue != null) defval = Double.parseDouble(defvalue); } public DoubleParameter(DoubleParameter parm) { super(parm); max = parm.max; min = parm.min; } public DoubleParameter(String name, String description, boolean required, Double defValue, double min, double max) { super(name, description, required, String.valueOf(defValue), null, null, null); defval = defValue; this.min = min; this.max = max; } public DoubleParameter(String name, String description, boolean required, Double defValue, Double value, double min, double max) { super(name, description, required, String.valueOf(defValue), String.valueOf(value), null, null); defval = defValue; this.min = min; this.max = max; } @Override public DoubleParameter copy() { return new DoubleParameter(this); } }