package jalview.bin.argparser;
+import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
import jalview.bin.argparser.Arg.Opt;
+import jalview.util.FileUtils;
/**
* Helper class to allow easy extraction of information about specific argument
{
protected Map<Arg, ArgValues> m;
- protected ArgValuesMap()
+ private String linkedId;
+
+ protected ArgValuesMap(String linkedId)
{
+ this.linkedId = linkedId;
this.newMap();
}
- protected ArgValuesMap(Map<Arg, ArgValues> map)
+ protected ArgValuesMap(String linkedId, Map<Arg, ArgValues> map)
{
+ this.linkedId = linkedId;
this.m = map;
}
+ public String getLinkedId()
+ {
+ return linkedId;
+ }
+
private Map<Arg, ArgValues> getMap()
{
return m;
m.put(a, new ArgValues(a));
}
- protected void addArgValue(Arg a, ArgValue av)
- {
- if (getMap() == null)
- m = new HashMap<Arg, ArgValues>();
-
- if (!m.containsKey(a))
- m.put(a, new ArgValues(a));
- ArgValues avs = m.get(a);
- avs.addArgValue(av);
- }
-
public ArgValues getArgValues(Arg a)
{
return m == null ? null : m.get(a);
{
if (m == null || !m.containsKey(a))
return false;
- return a.hasOption(Opt.STRING) ? getArgValue(a) != null
- : this.getBoolean(a);
+ return a.hasOption(Opt.STRING) ? getArgValue(a) != null : true;
}
public boolean hasValue(Arg a, String val)
return m.keySet();
}
+ public ArgValue getArgValueOfArgWithSubValKey(Arg a, String svKey)
+ {
+ return getArgValueOfArgWithSubValKey(a, svKey, false);
+ }
+
+ public ArgValue getArgValueOfArgWithSubValKey(Arg a, String svKey,
+ boolean last)
+ {
+ ArgValues avs = this.getArgValues(a);
+ if (avs == null)
+ {
+ return null;
+ }
+ List<ArgValue> compareAvs = avs.getArgValueList();
+ for (int i = 0; i < compareAvs.size(); i++)
+ {
+ int index = last ? compareAvs.size() - 1 - i : i;
+ ArgValue av = compareAvs.get(index);
+ SubVals sv = av.getSubVals();
+ if (sv.has(svKey) && !sv.get(svKey).equals("false"))
+ {
+ return av;
+ }
+ }
+ return null;
+ }
+
public ArgValue getClosestPreviousArgValueOfArg(ArgValue thisAv, Arg a)
{
ArgValue closestAv = null;
// specify an id in the subValues so wouldn't need to be guessed).
ArgValue closestAv = null;
int thisArgIndex = thisAv.getArgIndex();
+ if (!containsArg(a))
+ return null;
ArgValues compareAvs = this.getArgValues(a);
int closestNextIndex = Integer.MAX_VALUE;
for (ArgValue av : compareAvs.getArgValueList())
return closestAv;
}
+ // TODO this is incomplete and currently unused (fortunately)
public ArgValue[] getArgValuesReferringTo(String key, String value, Arg a)
{
// this looks for the *next* arg that *might* be referring back to
ArgValues avs = this.getArgValues(a);
return avs == null ? null : avs.getId(id);
}
+
+ /*
+ * This method returns the basename of the first --append or --open value.
+ * Used primarily for substitutions in output filenames.
+ */
+ public String getBasename()
+ {
+ return getDirBasenameOrExtension(false, false);
+ }
+
+ /*
+ * This method returns the basename of the first --append or --open value.
+ * Used primarily for substitutions in output filenames.
+ */
+ public String getExtension()
+ {
+ return getDirBasenameOrExtension(false, true);
+ }
+
+ /*
+ * This method returns the dirname of the first --append or --open value.
+ * Used primarily for substitutions in output filenames.
+ */
+ public String getDirname()
+ {
+ return getDirBasenameOrExtension(true, false);
+ }
+
+ public String getDirBasenameOrExtension(boolean dirname,
+ boolean extension)
+ {
+ String filename = null;
+ String appendVal = getValue(Arg.APPEND);
+ String openVal = getValue(Arg.OPEN);
+ if (appendVal != null)
+ filename = appendVal;
+ if (filename == null && openVal != null)
+ filename = openVal;
+ if (filename == null)
+ return null;
+
+ File file = new File(filename);
+ if (dirname)
+ {
+ return FileUtils.getDirname(file);
+ }
+ return extension ? FileUtils.getExtension(file)
+ : FileUtils.getBasename(file);
+ }
+
+ /*
+ * Checks if there is an Arg with Opt
+ */
+ public boolean hasArgWithOption(Opt o)
+ {
+ for (Arg a : getArgKeys())
+ {
+ if (a.hasOption(o))
+ return true;
+ }
+ return false;
+ }
}