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 extends A> 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;
}
}