Mercurial > hg4j
comparison cmdline/org/tmatesoft/hg/console/Options.java @ 299:45dc79e545f5
Recognize flag options (options with no arguments) in command line sample apps
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Sat, 17 Sep 2011 13:26:52 +0200 |
parents | b9700740553a |
children |
comparison
equal
deleted
inserted
replaced
298:aac0c3fab6ce | 299:45dc79e545f5 |
---|---|
14 * the terms of a license other than GNU General Public License | 14 * the terms of a license other than GNU General Public License |
15 * contact TMate Software at support@hg4j.com | 15 * contact TMate Software at support@hg4j.com |
16 */ | 16 */ |
17 package org.tmatesoft.hg.console; | 17 package org.tmatesoft.hg.console; |
18 | 18 |
19 import java.util.Collections; | |
19 import java.util.HashMap; | 20 import java.util.HashMap; |
20 import java.util.LinkedList; | 21 import java.util.LinkedList; |
21 import java.util.List; | 22 import java.util.List; |
22 import java.util.Map; | 23 import java.util.Map; |
24 import java.util.Set; | |
25 import java.util.TreeSet; | |
23 | 26 |
24 import org.tmatesoft.hg.repo.HgLookup; | 27 import org.tmatesoft.hg.repo.HgLookup; |
25 import org.tmatesoft.hg.repo.HgRepository; | 28 import org.tmatesoft.hg.repo.HgRepository; |
26 | 29 |
27 /** | 30 /** |
84 } | 87 } |
85 return new HgLookup().detectFromWorkingDir(); | 88 return new HgLookup().detectFromWorkingDir(); |
86 } | 89 } |
87 | 90 |
88 | 91 |
89 public static Options parse(String[] commandLineArgs) { | 92 public static Options parse(String[] commandLineArgs, Set<String> flagOptions) { |
90 Options rv = new Options(); | 93 Options rv = new Options(); |
91 List<String> values = new LinkedList<String>(); | 94 List<String> values = new LinkedList<String>(); |
92 rv.opt2values.put("", values); // values with no options | 95 rv.opt2values.put("", values); // values with no options |
93 for (String arg : commandLineArgs) { | 96 for (String arg : commandLineArgs) { |
94 if (arg.charAt(0) == '-') { | 97 if (arg.charAt(0) == '-') { |
95 // option | 98 // option |
96 if (arg.length() == 1) { | 99 if (arg.length() == 1) { |
97 throw new IllegalArgumentException("Bad option: -"); | 100 throw new IllegalArgumentException("Bad option: -"); |
98 } | 101 } |
99 values = rv.opt2values.get(arg); | 102 if (flagOptions.contains(arg)) { |
100 if (values == null) { | 103 rv.opt2values.put(arg, Collections.<String>emptyList()); |
101 rv.opt2values.put(arg, values = new LinkedList<String>()); | 104 values = rv.opt2values.get(""); |
105 } else { | |
106 values = rv.opt2values.get(arg); | |
107 if (values == null) { | |
108 rv.opt2values.put(arg, values = new LinkedList<String>()); | |
109 } | |
102 } | 110 } |
103 // next value, if any, gets into the values list for arg option. | 111 // next value, if any, gets into the values list for arg option. |
104 } else { | 112 } else { |
105 values.add(arg); | 113 values.add(arg); |
106 values = rv.opt2values.get(""); | 114 values = rv.opt2values.get(""); |
107 } | 115 } |
108 } | 116 } |
109 return rv; | 117 return rv; |
110 } | 118 } |
119 | |
120 public static Set<String> asSet(String... ss) { | |
121 TreeSet<String> rv = new TreeSet<String>(); | |
122 for (String s : ss) { | |
123 rv.add(s); | |
124 } | |
125 return rv; | |
126 } | |
111 } | 127 } |