JAL-3878 Make BaseJob setters public so they can be accessed by other tasks.
[jalview.git] / src / jalview / ws2 / api / WebService.java
index 946b7ec..4a101fd 100644 (file)
@@ -2,16 +2,16 @@ package jalview.ws2.api;
 
 import java.net.URL;
 import java.util.ArrayList;
-import java.util.Collections;
+import java.util.Collection;
 import java.util.List;
 import jalview.ws.params.ParamDatastoreI;
-import jalview.ws2.actions.Action;
+import jalview.ws2.actions.api.ActionI;
 
 import static java.util.Objects.requireNonNull;
 
-public class WebService<T extends Action>
+public class WebService<A extends ActionI<?>>
 {
-  public static class Builder<T extends Action>
+  public static class Builder<A extends ActionI<?>>
   {
     private URL url;
 
@@ -27,82 +27,59 @@ public class WebService<T extends Action>
 
     private ParamDatastoreI paramDatastore;
 
-    private List<T> actions = new ArrayList<>();
+    private Class<A> actionClass;
 
-    private Class<T> actionClass;
-
-    public Builder<T> url(URL val)
+    public Builder<A> url(URL val)
     {
       url = val;
       return this;
     }
 
-    public Builder<T> clientName(String val)
+    public Builder<A> clientName(String val)
     {
       clientName = val;
       return this;
     }
 
-    public Builder<T> category(String val)
+    public Builder<A> category(String val)
     {
       category = val;
       return this;
     }
 
-    public Builder<T> name(String val)
+    public Builder<A> name(String val)
     {
       name = val;
       return this;
     }
 
-    public Builder<T> description(String val)
+    public Builder<A> description(String val)
     {
       description = val;
       return this;
     }
 
-    public Builder<T> interactive(boolean val)
+    public Builder<A> interactive(boolean val)
     {
       interactive = val;
       return this;
     }
 
-    public Builder<T> paramDatastore(ParamDatastoreI val)
+    public Builder<A> paramDatastore(ParamDatastoreI val)
     {
       paramDatastore = val;
       return this;
     }
 
-    public Builder<T> actions(List<T> val)
-    {
-      actions = val;
-      return this;
-    }
-
-    public Builder<T> action(T val)
-    {
-      actions.add(val);
-      return this;
-    }
-
-    public Builder<T> actionClass(Class<T> val)
+    public Builder<A> actionClass(Class<A> val)
     {
       actionClass = val;
       return this;
     }
 
-    public WebService<T> build()
+    public WebService<A> build()
     {
-      requireNonNull(url);
-      requireNonNull(clientName);
-      requireNonNull(category);
-      requireNonNull(name);
-      requireNonNull(paramDatastore);
-      requireNonNull(actions);
-      if (actions.size() == 0)
-        throw new IllegalArgumentException("Empty actions list");
-      requireNonNull(actionClass);
-      return new WebService<T>(this);
+      return new WebService<A>(this);
     }
   }
 
@@ -120,12 +97,18 @@ public class WebService<T extends Action>
 
   private final ParamDatastoreI paramDatastore;
 
-  private final List<T> actions;
+  private final List<A> actions;
 
-  private final Class<T> actionClass;
+  private final Class<A> actionClass;
 
-  WebService(Builder<T> builder)
+  protected WebService(Builder<A> builder)
   {
+    requireNonNull(builder.url);
+    requireNonNull(builder.clientName);
+    requireNonNull(builder.category);
+    requireNonNull(builder.name);
+    requireNonNull(builder.paramDatastore);
+    requireNonNull(builder.actionClass);
     this.url = builder.url;
     this.clientName = builder.clientName;
     this.category = builder.category;
@@ -133,56 +116,66 @@ public class WebService<T extends Action>
     this.description = builder.description;
     this.interactive = builder.interactive;
     this.paramDatastore = builder.paramDatastore;
-    this.actions = Collections.unmodifiableList(builder.actions);
+    this.actions = new ArrayList<>();
     this.actionClass = builder.actionClass;
   }
-  
-  public static <T extends Action> Builder<T> newBuilder()
+
+  public static <A extends ActionI<?>> Builder<A> newBuilder()
+  {
+    return new Builder<A>();
+  }
+
+  public void addAction(A action)
+  {
+    this.actions.add(action);
+  }
+
+  public void addActions(Collection<? extends A> actions)
   {
-    return new Builder<T>();
+    this.actions.addAll(actions);
   }
 
-  URL getUrl()
+  public URL getUrl()
   {
     return url;
   }
 
-  String getClientName()
+  public String getClientName()
   {
     return clientName;
   }
 
-  String getCategory()
+  public String getCategory()
   {
     return category;
   }
 
-  String getName()
+  public String getName()
   {
     return name;
   }
 
-  String getDescription()
+  public String getDescription()
   {
     return description;
   }
 
-  boolean isInteractive()
+  public boolean isInteractive()
   {
     return interactive;
   }
 
-  ParamDatastoreI getParamDatastore()
+  public ParamDatastoreI getParamDatastore()
   {
     return paramDatastore;
   }
 
-  List<T> getActions()
+  public List<A> getActions()
   {
     return actions;
   }
 
-  Class<T> getActionClass()
+  public Class<A> getActionClass()
   {
     return actionClass;
   }