Merge branch 'JAL-3878_ws-overhaul-3' into mmw/Release_2_12_ws_merge
[jalview.git] / src / jalview / ws / params / simple / IntegerParameter.java
index b3a01b2..af6c881 100644 (file)
@@ -22,6 +22,7 @@ package jalview.ws.params.simple;
 
 import jalview.ws.params.ParameterI;
 import jalview.ws.params.ValueConstrainI;
+import static java.util.Objects.requireNonNullElse;
 
 /**
  * @author jimp
@@ -29,6 +30,68 @@ import jalview.ws.params.ValueConstrainI;
  */
 public class IntegerParameter extends Option implements ParameterI
 {
+  public static class Builder extends Option.Builder
+  {
+    // assigning them the opposite way results in no limits unless both are set
+    protected int min = Integer.MAX_VALUE;
+
+    protected int max = Integer.MIN_VALUE;
+
+    @Override
+    public void setDefaultValue(String defaultValue)
+    {
+      throw new UnsupportedOperationException();
+    }
+
+    public void setDefaultValue(Integer defaultValue)
+    {
+      if (defaultValue != null)
+        super.setDefaultValue(defaultValue.toString());
+      else
+        super.setDefaultValue(null);
+    }
+
+    @Override
+    public void setValue(String value)
+    {
+      throw new UnsupportedOperationException();
+    }
+
+    public void setValue(Integer value)
+    {
+      if (value != null)
+        super.setValue(value.toString());
+      else
+        super.setValue(null);
+    }
+
+    public void setMin(Integer min)
+    {
+      this.min = requireNonNullElse(min, Integer.MAX_VALUE);
+    }
+
+    public void setMax(Integer max)
+    {
+      this.max = requireNonNullElse(max, Integer.MIN_VALUE);
+    }
+
+    public void setBounds(Integer min, Integer max)
+    {
+      setMin(min);
+      setMax(max);
+    }
+
+    public IntegerParameter build()
+    {
+      return new IntegerParameter(this);
+    }
+  }
+
+  public static Builder newBuilder()
+  {
+    return new Builder();
+  }
+
   int defval;
 
   int min;
@@ -61,6 +124,15 @@ public class IntegerParameter extends Option implements ParameterI
     };
   }
 
+  protected IntegerParameter(Builder builder)
+  {
+    super(builder);
+    min = builder.min;
+    max = builder.max;
+    if (defvalue != null)
+      defval = Integer.parseInt(defvalue);
+  }
+
   public IntegerParameter(IntegerParameter parm)
   {
     super(parm);
@@ -69,20 +141,20 @@ public class IntegerParameter extends Option implements ParameterI
   }
 
   public IntegerParameter(String name, String description, boolean required,
-          int defValue, int min, int max)
+      int defValue, int min, int max)
   {
     super(name, description, required, String.valueOf(defValue), null, null,
-            null);
+        null);
     defval = defValue;
     this.min = min;
     this.max = max;
   }
 
   public IntegerParameter(String name, String description, boolean required,
-          int defValue, int value, int min, int max)
+      int defValue, int value, int min, int max)
   {
     super(name, description, required, String.valueOf(defValue),
-            String.valueOf(value), null, null);
+        String.valueOf(value), null, null);
     defval = defValue;
     this.min = min;
     this.max = max;