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.api.ActionI;
import static java.util.Objects.requireNonNull;
-public class WebService<T extends ActionI>
+public class WebService<A extends ActionI<?>>
{
- public static class Builder<T extends ActionI>
+ public static class Builder<A extends ActionI<?>>
{
private URL url;
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);
}
}
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;
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 ActionI> 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;
}