JAL-629 add an {extension} substitution
[jalview.git] / src / jalview / bin / argparser / ArgValuesMap.java
index 176dc7c..99a1ef6 100644 (file)
@@ -18,16 +18,25 @@ public class ArgValuesMap
 {
   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;
@@ -147,6 +156,8 @@ public class ArgValuesMap
     // 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())
@@ -193,37 +204,64 @@ public class ArgValuesMap
   }
 
   /*
-   * This method returns the basename of the first --open or --opennew value. 
+   * This method returns the basename of the first --append or --open value. 
    * Used primarily for substitutions in output filenames.
    */
   public String getBasename()
   {
-    return getDirOrBasename(false);
+    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 --open or --opennew value. 
+   * This method returns the dirname of the first --append or --open value. 
    * Used primarily for substitutions in output filenames.
    */
   public String getDirname()
   {
-    return getDirOrBasename(true);
+    return getDirBasenameOrExtension(true, false);
   }
 
-  public String getDirOrBasename(boolean dirname)
+  public String getDirBasenameOrExtension(boolean dirname,
+          boolean extension)
   {
     String filename = null;
+    String appendVal = getValue(Arg.APPEND);
     String openVal = getValue(Arg.OPEN);
-    String opennewVal = getValue(Arg.OPENNEW);
-    if (openVal != null)
+    if (appendVal != null)
+      filename = appendVal;
+    if (filename == null && openVal != null)
       filename = openVal;
-    if (filename == null && opennewVal != null)
-      filename = opennewVal;
     if (filename == null)
       return null;
 
     File file = new File(filename);
-    return dirname ? FileUtils.getDirname(file)
+    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;
+  }
 }