X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fws2%2Fparams%2FSimpleParamSet.java;fp=src%2Fjalview%2Fws2%2Fparams%2FSimpleParamSet.java;h=9050c5f91992758c23b07a24e7d297dc98edbe96;hb=8307be83ae28064b8f606f6c7a77dd186485a0fa;hp=0000000000000000000000000000000000000000;hpb=49ab19e8189569edf0bc1f4ba8dac14e67f4ca36;p=jalview.git diff --git a/src/jalview/ws2/params/SimpleParamSet.java b/src/jalview/ws2/params/SimpleParamSet.java new file mode 100644 index 0000000..9050c5f --- /dev/null +++ b/src/jalview/ws2/params/SimpleParamSet.java @@ -0,0 +1,281 @@ +package jalview.ws2.params; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import jalview.ws.params.ArgumentI; +import jalview.ws.params.WsParamSetI; + +/** + * A simple, web service client agnostic, representation of parameter sets. + * Instances are created from the service data fetched from the server or from + * the user preset files. This implementation of {@link WsParamSetI} is meant to + * decouple parameter set representation form specific clients. + * + * @author mmwarowny + * + */ +public class SimpleParamSet implements WsParamSetI +{ + /** + * A convenience builder of {@link SimpleParamSet} objects. + * + * @author mmwarowny + */ + public static class Builder + { + private String name = "default"; + + private String description = ""; + + private List applicableUrls = new ArrayList<>(); + + private boolean modifiable = false; + + private List arguments = new ArrayList<>(); + + public Builder() + { + } + + /** + * Set a name of parameter set. + * + * @param val + * name + */ + public void name(String val) + { + name = val; + } + + /** + * Set a description of parameter set. + * + * @param val + * description + */ + public void description(String val) + { + description = val; + } + + /** + * Add a url to applicable urls for parameter set. + * + * @param val + * applicable url + */ + public void url(String val) + { + applicableUrls.add(val); + } + + /** + * Set all applicable urls for parameter set. Current url list will be + * replaced by provided urls. + * + * @param val + * applicable urls + */ + public void urls(String[] val) + { + applicableUrls.clear(); + for (String url : val) + applicableUrls.add(url); + } + + /** + * Set modifiable flag for parameter set. + * + * @param val + * modifiable + */ + public void modifiable(boolean val) + { + modifiable = val; + } + + /** + * Add an argument to the preset arguments. + * + * @param val + * argument to be added + */ + public void argument(ArgumentI val) + { + arguments.add(val); + } + + /** + * Set arguments for parameter set. Current parameters list will be + * replaced by provided arguments. + * + * @param val + * arguments to be added + */ + public void arguments(List val) + { + arguments.clear(); + arguments.addAll(val); + } + + /** + * Build a new {@link SimpleParamSet} object from the current state of this + * builder. + * + * @return new paramset instance + */ + public SimpleParamSet build() + { + return new SimpleParamSet(this); + } + } + + protected String name; + + protected String description; + + protected String[] applicableUrls; + + protected String sourceFile; + + protected boolean modifiable; + + protected List arguments; + + protected SimpleParamSet(Builder builder) + { + this.name = builder.name; + this.description = builder.description; + this.applicableUrls = builder.applicableUrls.toArray(new String[0]); + this.sourceFile = null; + this.modifiable = builder.modifiable; + setArguments(builder.arguments); + } + + /** + * Create a copy of the provided paramset. The new instance has the same + * properties as the original paramset. The arguments list is a shallow copy + * of the original arguments. + * + * @param copy + */ + public SimpleParamSet(WsParamSetI copy) + { + this.name = copy.getName(); + this.description = copy.getDescription(); + var urls = copy.getApplicableUrls(); + this.applicableUrls = Arrays.copyOf(urls, urls.length); + this.sourceFile = copy.getSourceFile(); + this.modifiable = copy.isModifiable(); + setArguments(copy.getArguments()); + } + + /** + * Create a new instance of the parameter set builder. + * + * @return new parameter set builder + */ + public static Builder newBuilder() + { + return new Builder(); + } + + @Override + public String getName() + { + return name; + } + + /** + * Set a human readable name for this parameter set. + * + * @param name + * new name + */ + public void setName(String name) + { + this.name = name; + } + + @Override + public String getDescription() + { + return description; + } + + /** + * Set additional notes for this parameter set. + * + * @param description + * additional notes + */ + public void setDescription(String description) + { + this.description = description; + } + + @Override + public String[] getApplicableUrls() + { + return applicableUrls; + } + + /** + * Set the list of service endpoints which this parameter set is valid for. + * + * @param urls + * new service endpoints + */ + public void setApplicableUrls(String[] urls) + { + this.applicableUrls = urls; + } + + @Override + public String getSourceFile() + { + return sourceFile; + } + + @Override + public void setSourceFile(String newFile) + { + this.sourceFile = newFile; + } + + @Override + public boolean isModifiable() + { + return this.modifiable; + } + + /** + * Set whether this parameter set is modifiable or not. + * + * @param modifiable + * new modifiable value + */ + public void setModifiable(boolean modifiable) + { + this.modifiable = modifiable; + } + + @Override + public List getArguments() + { + return this.arguments; + } + + @Override + public void setArguments(List args) + { + if (!isModifiable()) + throw new UnsupportedOperationException( + "Attempting to modify an unmodifiable parameter set"); + this.arguments = Collections.unmodifiableList(new ArrayList<>(args)); + } +}