KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > de > java2html > commandline > CommandlineArguments


1 package de.java2html.commandline;
2
3 import java.util.HashMap JavaDoc;
4 import java.util.HashSet JavaDoc;
5 import java.util.Iterator JavaDoc;
6 import java.util.Map JavaDoc;
7 import java.util.Set JavaDoc;
8
9 /**
10  * @author Markus Gebhard
11  */

12 public class CommandlineArguments {
13   private Map JavaDoc valueByParameterName = new HashMap JavaDoc();
14   private Set JavaDoc flags = new HashSet JavaDoc();
15
16   public CommandlineArguments(String JavaDoc[] args) throws IllegalCommandlineParametersException {
17     for (int i = 0; i < args.length; i++) {
18       if (isValidFlagName(args[i])) {
19         String JavaDoc flagName = args[i].substring(1).toLowerCase();
20         String JavaDoc value = null;
21         if (i + 1 < args.length) {
22           if (!isValidFlagName(args[i + 1])) {
23             value = args[i + 1];
24             ++i;
25           }
26         }
27         if (flags.contains(flagName) || valueByParameterName.containsKey(flagName)) {
28           throw new IllegalCommandlineParametersException("Argument '"
29               + flagName
30               + "' has been defined more often than once.");
31         }
32         if (value == null) {
33           flags.add(flagName);
34         }
35         else {
36           valueByParameterName.put(flagName, value);
37         }
38       }
39       else {
40         throw new IllegalCommandlineParametersException("Unexpected parameter '" + args[i] + "'");
41       }
42     }
43   }
44
45   private boolean isValidFlagName(String JavaDoc name) {
46     if (!name.startsWith("-")) {
47       return false;
48     }
49     try {
50       Double.parseDouble(name);
51       return false;
52     }
53     catch (NumberFormatException JavaDoc e) {
54       return true;
55     }
56   }
57
58   public String JavaDoc getParameterStringValue(String JavaDoc parameterName) {
59     return (String JavaDoc) valueByParameterName.get(parameterName.toLowerCase());
60   }
61
62   public String JavaDoc getParameterStringValue(String JavaDoc parameterName, String JavaDoc defaultValue) {
63     String JavaDoc value = getParameterStringValue(parameterName);
64     return value != null ? value : defaultValue;
65   }
66
67   public int getParameterPositiveIntValue(String JavaDoc parameterName, int defaultValue)
68       throws IllegalCommandlineParametersException {
69     String JavaDoc value = getParameterStringValue(parameterName);
70     if (value == null) {
71       return defaultValue;
72     }
73
74     int i = parseInt(value);
75     if (i < 0) {
76       throw new IllegalCommandlineParametersException(
77           "Positive value for int argument expected, was '" + value + "'");
78     }
79     return i;
80   }
81
82   private int parseInt(String JavaDoc value) throws IllegalCommandlineParametersException {
83     try {
84       return Integer.parseInt(value);
85     }
86     catch (NumberFormatException JavaDoc e) {
87       throw new IllegalCommandlineParametersException("Illegal format for a int value '"
88           + value
89           + "'");
90     }
91   }
92
93   public boolean isFlagSet(String JavaDoc flagName) {
94     return flags.contains(flagName.toLowerCase());
95   }
96
97   public boolean isParameterSet(String JavaDoc flagName) {
98     return valueByParameterName.containsKey(flagName.toLowerCase());
99   }
100
101   public String JavaDoc getRequiredParameterStringValue(String JavaDoc parameterName)
102       throws IllegalCommandlineParametersException {
103     String JavaDoc value = getParameterStringValue(parameterName);
104     if (value == null) {
105       throw new IllegalCommandlineParametersException("Missing required parameter value for '"
106           + parameterName
107           + "'");
108     }
109     return value;
110   }
111
112   public void assertContainsNoUnsupportedFlags(String JavaDoc[] supportedFlagNames)
113       throws IllegalCommandlineParametersException {
114     Set JavaDoc supportedFlagNameSet = createLowerCaseNameSet(supportedFlagNames);
115     Iterator JavaDoc iterator = flags.iterator();
116     while (iterator.hasNext()) {
117       String JavaDoc flagName = (String JavaDoc) iterator.next();
118       if (!supportedFlagNameSet.contains(flagName)) {
119         throw new IllegalCommandlineParametersException("The flag '"
120             + flagName
121             + "' is not supported (or missing required parameter value).");
122       }
123     }
124   }
125
126   public void assertContainsNoUnsupportedParameters(String JavaDoc[] supportedParameterNames)
127       throws IllegalCommandlineParametersException {
128     Set JavaDoc supportedParameterNameSet = createLowerCaseNameSet(supportedParameterNames);
129     Iterator JavaDoc iterator = valueByParameterName.keySet().iterator();
130     while (iterator.hasNext()) {
131       String JavaDoc flagName = (String JavaDoc) iterator.next();
132       if (!supportedParameterNameSet.contains(flagName)) {
133         throw new IllegalCommandlineParametersException("The parameter '"
134             + flagName
135             + "' is not supported.");
136       }
137     }
138   }
139
140   private Set JavaDoc createLowerCaseNameSet(String JavaDoc[] names) {
141     Set JavaDoc supportedFlagNameSet = new HashSet JavaDoc();
142     for (int i = 0; i < names.length; i++) {
143       supportedFlagNameSet.add(names[i].toLowerCase());
144     }
145     return supportedFlagNameSet;
146   }
147 }
Popular Tags