22
33import java .util .ArrayList ;
44import java .util .Arrays ;
5+ import java .util .HashSet ;
56import java .util .List ;
67import java .util .Map ;
8+ import java .util .Properties ;
79import java .util .Set ;
810import java .util .TreeMap ;
911import java .util .logging .Level ;
@@ -18,12 +20,12 @@ public class OptionParser {
1820 private Map <String ,OptionValue > optionsDescriptors = new TreeMap <>();
1921 private Map <String ,OptionValue > requiredOptions = new TreeMap <>();
2022 private Map <String ,OptionValue > parsedOptions = new TreeMap <>();
23+ private Set <String > overridenOptions = new HashSet <>();
2124 private List <String > parsedInputList = new ArrayList <>();
2225 private String program = "undefined" ;
2326 private boolean requiresInputList = true ;
2427 private String programDescription = "" ;
25- private boolean overrideVerbosity = false ;
26-
28+
2729 public OptionParser (){
2830 init ();
2931 }
@@ -34,9 +36,11 @@ public OptionParser(String pname){
3436 }
3537
3638 private void init () {
37- addOption ("-v" ,"FINE" ,"logging verbosity level" );
39+ addOption ("-l" ,"FINE" ,"logging verbosity level" );
40+ addOption ("-v" ,null ,"print version" );
41+ addOption ("-h" ,null ,"print help" );
3842 }
39-
43+
4044 public void setDescription (String desc ){
4145 this .programDescription = desc ;
4246 }
@@ -53,7 +57,7 @@ public void addRequired(String key){
5357 private void check (String key , Set <String > keys ) {
5458 if (keys .contains (key )) {
5559 System .out .println ("WARNING: overriding OptionParser option: " +key );
56- if ( key . equals ( "-v" )) overrideVerbosity = true ;
60+ overridenOptions . add ( key ) ;
5761 }
5862 }
5963
@@ -130,17 +134,21 @@ public void printUsage(){
130134 System .out .println (this .getUsageString ());
131135 System .out .println ("\n \n " );
132136 }
133-
134- public void parse (String [] args ){
137+
138+ public void parse (String ... args ) {
135139
136140 List <String > arguments = new ArrayList <>();
137141 arguments .addAll (Arrays .asList (args ));
138142
139- // Default, non-overridable, help option :
140- if (this .containsOptions (arguments , "-h" ,"-help" )==true ){
143+ // Default, non-overridable, options :
144+ if (this .containsOptions (arguments ,"-h" ,"-help" )==true ){
141145 this .printUsage ();
142146 System .exit (0 );
143147 }
148+ else if (this .containsOptions (arguments ,"-v" ,"-version" )==true ){
149+ System .out .println (getVersion ());
150+ System .exit (0 );
151+ }
144152
145153 // Parse required options:
146154 for (Map .Entry <String ,OptionValue > entry : this .requiredOptions .entrySet ()){
@@ -173,8 +181,8 @@ public void parse(String[] args){
173181 }
174182
175183 // Configure logger:
176- if (!overrideVerbosity ) {
177- setVerbosity (this .parsedOptions .get ("-v " ).stringValue ());
184+ if (!overridenOptions . contains ( "-l" ) ) {
185+ setVerbosity (this .parsedOptions .get ("-l " ).stringValue ());
178186 }
179187 }
180188
@@ -183,26 +191,40 @@ private void setVerbosity(String level) {
183191 DefaultLogger .initialize (Level .parse (level ));
184192 }
185193 catch (IllegalArgumentException e ) {
186- System .err .println ("Invalid -v java.util.logging.Level: " +level );
194+ System .err .println ("Invalid -l java.util.logging.Level: " +level );
187195 System .exit (102 );
188196 }
189197 catch (NullPointerException e ) {
190- System .err .println ("Unavailable -v COATJAVA logging level: " +level );
198+ System .err .println ("Unavailable -l COATJAVA logging level: " +level );
191199 System .exit (103 );
192200 }
193201 }
194202
195203 public List <String > getInputList (){
196204 return this .parsedInputList ;
197205 }
206+
207+ public static String getVersion (){
208+ try {
209+ Properties p = new Properties ();
210+ p .load (OptionParser .class .getResourceAsStream ("/pom.properties" ));
211+ return String .format ("coatjava version %s" ,p .getProperty ("version" ));
212+ } catch (Exception e ) {
213+ return "coatjava version ???" ;
214+ }
215+ }
198216
199217 public static void main (String [] args ){
200218 OptionParser parser = new OptionParser ();
201219 parser .addRequired ("-o" );
202220 parser .addOption ("-r" , "10" );
203221 parser .addOption ("-t" , "25.0" );
204222 parser .addOption ("-d" , "35" );
205- parser .parse (args );
223+ parser .addOption ("-h" ,"helpless" );
224+ parser .addOption ("-v" ,"versionless" );
225+ if (args .length == 0 ) parser .parse ("-o" ,"out.dat" ,"in.dat" );
226+ else parser .parse (args );
206227 parser .show ();
228+ parser .parse ("-h" );
207229 }
208230}
0 commit comments