55import static com .cleancoder .args .ArgsException .ErrorCode .*;
66
77public class Args {
8- private Map <Character , ArgumentMarshaler > marshalers ;
9- private Set <Character > argsFound ;
10- private ListIterator <String > currentArgument ;
11-
12- public Args (String schema , String [] args ) throws ArgsException {
13- marshalers = new HashMap <Character , ArgumentMarshaler >();
14- argsFound = new HashSet <Character >();
15-
16- parseSchema (schema );
17- parseArgumentStrings (Arrays .asList (args ));
18- }
19-
20- private void parseSchema (String schema ) throws ArgsException {
21- for (String element : schema .split ("," ))
22- if (element .length () > 0 )
23- parseSchemaElement (element .trim ());
24- }
25-
26- private void parseSchemaElement (String element ) throws ArgsException {
27- char elementId = element .charAt (0 );
28- String elementTail = element .substring (1 );
29- validateSchemaElementId (elementId );
30- if (elementTail .length () == 0 )
31- marshalers .put (elementId , new BooleanArgumentMarshaler ());
32- else if (elementTail .equals ("*" ))
33- marshalers .put (elementId , new StringArgumentMarshaler ());
34- else if (elementTail .equals ("#" ))
35- marshalers .put (elementId , new IntegerArgumentMarshaler ());
36- else if (elementTail .equals ("##" ))
37- marshalers .put (elementId , new DoubleArgumentMarshaler ());
38- else if (elementTail .equals ("[*]" ))
39- marshalers .put (elementId , new StringArrayArgumentMarshaler ());
40- else if (elementTail .equals ("&" ))
41- marshalers .put (elementId , new MapArgumentMarshaler ());
42- else
43- throw new ArgsException (INVALID_ARGUMENT_FORMAT , elementId , elementTail );
44- }
45-
46- private void validateSchemaElementId (char elementId ) throws ArgsException {
47- if (!Character .isLetter (elementId ))
48- throw new ArgsException (INVALID_ARGUMENT_NAME , elementId , null );
49- }
50-
51- private void parseArgumentStrings (List <String > argsList ) throws ArgsException {
52- for (currentArgument = argsList .listIterator (); currentArgument .hasNext ();) {
53- String argString = currentArgument .next ();
54- if (argString .startsWith ("-" )) {
55- parseArgumentCharacters (argString .substring (1 ));
56- } else {
57- currentArgument .previous ();
58- break ;
59- }
8+ private Map <Character , ArgumentMarshaler > marshalers ;
9+ private Set <Character > argsFound ;
10+ private ListIterator <String > currentArgument ;
11+
12+ public Args (String schema , String [] args ) throws ArgsException {
13+ marshalers = new HashMap <Character , ArgumentMarshaler >();
14+ argsFound = new HashSet <Character >();
15+
16+ parseSchema (schema );
17+ parseArgumentStrings (Arrays .asList (args ));
6018 }
61- }
62-
63- private void parseArgumentCharacters (String argChars ) throws ArgsException {
64- for (int i = 0 ; i < argChars .length (); i ++)
65- parseArgumentCharacter (argChars .charAt (i ));
66- }
67-
68- private void parseArgumentCharacter (char argChar ) throws ArgsException {
69- ArgumentMarshaler m = marshalers .get (argChar );
70- if (m == null ) {
71- throw new ArgsException (UNEXPECTED_ARGUMENT , argChar , null );
72- } else {
73- argsFound .add (argChar );
74- try {
75- m .set (currentArgument );
76- } catch (ArgsException e ) {
77- e .setErrorArgumentId (argChar );
78- throw e ;
79- }
19+
20+ private void parseSchema (String schema ) throws ArgsException {
21+ for (String element : schema .split ("," ))
22+ if (element .length () > 0 )
23+ parseSchemaElement (element .trim ());
8024 }
81- }
8225
83- public boolean has (char arg ) {
84- return argsFound .contains (arg );
85- }
26+ private void parseSchemaElement (String element ) throws ArgsException {
27+ char elementId = element .charAt (0 );
28+ String elementTail = element .substring (1 );
29+ validateSchemaElementId (elementId );
30+ if (elementTail .length () == 0 )
31+ marshalers .put (elementId , new BooleanArgumentMarshaler ());
32+ else if (elementTail .equals ("*" ))
33+ marshalers .put (elementId , new StringArgumentMarshaler ());
34+ else if (elementTail .equals ("#" ))
35+ marshalers .put (elementId , new IntegerArgumentMarshaler ());
36+ else if (elementTail .equals ("##" ))
37+ marshalers .put (elementId , new DoubleArgumentMarshaler ());
38+ else if (elementTail .equals ("[*]" ))
39+ marshalers .put (elementId , new StringArrayArgumentMarshaler ());
40+ else if (elementTail .equals ("&" ))
41+ marshalers .put (elementId , new MapArgumentMarshaler ());
42+ else
43+ throw new ArgsException (INVALID_ARGUMENT_FORMAT , elementId , elementTail );
44+ }
8645
87- public int nextArgument () {
88- return currentArgument .nextIndex ();
89- }
46+ private void validateSchemaElementId (char elementId ) throws ArgsException {
47+ if (!Character .isLetter (elementId ))
48+ throw new ArgsException (INVALID_ARGUMENT_NAME , elementId , null );
49+ }
9050
91- public boolean getBoolean (char arg ) {
92- return BooleanArgumentMarshaler .getValue (marshalers .get (arg ));
93- }
51+ private void parseArgumentStrings (List <String > argsList ) throws ArgsException {
52+ for (currentArgument = argsList .listIterator (); currentArgument .hasNext (); ) {
53+ String argString = currentArgument .next ();
54+ if (argString .startsWith ("-" )) {
55+ parseArgumentCharacters (argString .substring (1 ));
56+ } else {
57+ currentArgument .previous ();
58+ break ;
59+ }
60+ }
61+ }
9462
95- public String getString (char arg ) {
96- return StringArgumentMarshaler .getValue (marshalers .get (arg ));
97- }
63+ private void parseArgumentCharacters (String argChars ) throws ArgsException {
64+ for (int i = 0 ; i < argChars .length (); i ++)
65+ parseArgumentCharacter (argChars .charAt (i ));
66+ }
9867
99- public int getInt (char arg ) {
100- return IntegerArgumentMarshaler .getValue (marshalers .get (arg ));
101- }
68+ private void parseArgumentCharacter (char argChar ) throws ArgsException {
69+ ArgumentMarshaler m = marshalers .get (argChar );
70+ if (m == null ) {
71+ throw new ArgsException (UNEXPECTED_ARGUMENT , argChar , null );
72+ } else {
73+ argsFound .add (argChar );
74+ try {
75+ m .set (currentArgument );
76+ } catch (ArgsException e ) {
77+ e .setErrorArgumentId (argChar );
78+ throw e ;
79+ }
80+ }
81+ }
10282
103- public double getDouble (char arg ) {
104- return DoubleArgumentMarshaler . getValue ( marshalers . get ( arg ) );
105- }
83+ public boolean has (char arg ) {
84+ return argsFound . contains ( arg );
85+ }
10686
107- public String [] getStringArray ( char arg ) {
108- return StringArrayArgumentMarshaler . getValue ( marshalers . get ( arg ) );
109- }
87+ public int nextArgument ( ) {
88+ return currentArgument . nextIndex ( );
89+ }
11090
111- public Map <String , String > getMap (char arg ) {
112- return MapArgumentMarshaler .getValue (marshalers .get (arg ));
113- }
91+ public boolean getBoolean (char arg ) {
92+ return BooleanArgumentMarshaler .getValue (marshalers .get (arg ));
93+ }
94+
95+ public String getString (char arg ) {
96+ return StringArgumentMarshaler .getValue (marshalers .get (arg ));
97+ }
98+
99+ public int getInt (char arg ) {
100+ return IntegerArgumentMarshaler .getValue (marshalers .get (arg ));
101+ }
102+
103+ public double getDouble (char arg ) {
104+ return DoubleArgumentMarshaler .getValue (marshalers .get (arg ));
105+ }
106+
107+ public String [] getStringArray (char arg ) {
108+ return StringArrayArgumentMarshaler .getValue (marshalers .get (arg ));
109+ }
110+
111+ public Map <String , String > getMap (char arg ) {
112+ return MapArgumentMarshaler .getValue (marshalers .get (arg ));
113+ }
114114}
0 commit comments