package jalview.ws2.api; import java.net.URL; import java.util.ArrayList; 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> { public static class Builder> { private URL url; private String clientName; private String category; private String name; private String description = ""; private boolean interactive = false; private ParamDatastoreI paramDatastore; private Class actionClass; public Builder url(URL val) { url = val; return this; } public Builder clientName(String val) { clientName = val; return this; } public Builder category(String val) { category = val; return this; } public Builder name(String val) { name = val; return this; } public Builder description(String val) { description = val; return this; } public Builder interactive(boolean val) { interactive = val; return this; } public Builder paramDatastore(ParamDatastoreI val) { paramDatastore = val; return this; } public Builder actionClass(Class val) { actionClass = val; return this; } public WebService build() { return new WebService(this); } } private final URL url; private final String clientName; private final String category; private final String name; private final String description; private final boolean interactive; private final ParamDatastoreI paramDatastore; private final List actions; private final Class actionClass; protected WebService(Builder 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.name = builder.name; this.description = builder.description; this.interactive = builder.interactive; this.paramDatastore = builder.paramDatastore; this.actions = new ArrayList<>(); this.actionClass = builder.actionClass; } public static > Builder newBuilder() { return new Builder(); } public void addAction(A action) { this.actions.add(action); } public void addActions(Collection actions) { this.actions.addAll(actions); } public URL getUrl() { return url; } public String getClientName() { return clientName; } public String getCategory() { return category; } public String getName() { return name; } public String getDescription() { return description; } public boolean isInteractive() { return interactive; } public ParamDatastoreI getParamDatastore() { return paramDatastore; } public List getActions() { return actions; } public Class getActionClass() { return actionClass; } }