Merge branch 'develop' into features/JAL-2094_colourInterface
[jalview.git] / src / jalview / bin / ArgsParser.java
1 package jalview.bin;
2
3 import java.net.URLDecoder;
4 import java.util.Vector;
5
6 /**
7  * Notes: this argParser does not distinguish between parameter switches,
8  * parameter values and argument text. If an argument happens to be identical to
9  * a parameter, it will be taken as such (even though it didn't have a '-'
10  * prefixing it).
11  * 
12  * @author Andrew Waterhouse and JBP documented.
13  * 
14  */
15 public class ArgsParser
16 {
17   Vector<String> vargs = null;
18
19   public ArgsParser(String[] args)
20   {
21     vargs = new Vector<String>();
22     for (int i = 0; i < args.length; i++)
23     {
24       String arg = args[i].trim();
25       if (arg.charAt(0) == '-')
26       {
27         arg = arg.substring(1);
28       }
29       vargs.addElement(arg);
30     }
31   }
32
33   /**
34    * check for and remove first occurence of arg+parameter in arglist.
35    * 
36    * @param arg
37    * @return return the argument following the given arg if arg was in list.
38    */
39   public String getValue(String arg)
40   {
41     return getValue(arg, false);
42   }
43
44   public String getValue(String arg, boolean utf8decode)
45   {
46     int index = vargs.indexOf(arg);
47     String dc = null, ret = null;
48     if (index != -1)
49     {
50       ret = vargs.elementAt(index + 1).toString();
51       vargs.removeElementAt(index);
52       vargs.removeElementAt(index);
53       if (utf8decode && ret != null)
54       {
55         try
56         {
57           dc = URLDecoder.decode(ret, "UTF-8");
58           ret = dc;
59         } catch (Exception e)
60         {
61           // TODO: log failure to decode
62         }
63       }
64     }
65     return ret;
66   }
67
68   /**
69    * check for and remove first occurence of arg in arglist.
70    * 
71    * @param arg
72    * @return true if arg was present in argslist.
73    */
74   public boolean contains(String arg)
75   {
76     if (vargs.contains(arg))
77     {
78       vargs.removeElement(arg);
79       return true;
80     }
81     else
82     {
83       return false;
84     }
85   }
86
87   public String nextValue()
88   {
89     return vargs.remove(0);
90   }
91
92   public int getSize()
93   {
94     return vargs.size();
95   }
96
97 }