From 735c452273078d30e1e19554dd6400c028932332 Mon Sep 17 00:00:00 2001 From: viiviii Date: Thu, 12 May 2022 10:17:51 +0900 Subject: [PATCH 1/7] =?UTF-8?q?1.=20args=20=EB=B0=B0=EC=97=B4=EC=9D=84=20l?= =?UTF-8?q?ist=EB=A1=9C=20=EB=B3=80=ED=99=98=20=ED=9B=84=20setxxxArg()?= =?UTF-8?q?=EC=97=90=EC=84=9C=20Iterator=EB=A5=BC=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chapter14/args/Args.java | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/main/java/chapter14/args/Args.java b/src/main/java/chapter14/args/Args.java index 0e79af4..fed1dbb 100644 --- a/src/main/java/chapter14/args/Args.java +++ b/src/main/java/chapter14/args/Args.java @@ -5,15 +5,15 @@ public class Args { private String schema; - private String[] args; private boolean valid = true; private Set unexpectedArguments = new TreeSet<>(); private Map marshalers = new HashMap<>(); private Set argsFound = new HashSet<>(); - private int currentArgument; + private Iterator currentArgument; private char errorArgumentId = '\0'; private String errorParameter = "TILT"; private ErrorCode errorCode = ErrorCode.OK; + private List argsList; enum ErrorCode { OK, MISSING_STRING, MISSING_INTEGER, INVALID_INTEGER, UNEXPECTED_ARGUMENT @@ -21,12 +21,12 @@ enum ErrorCode { public Args(String schema, String[] args) throws ParseException { this.schema = schema; - this.args = args; + argsList = Arrays.asList(args); valid = parse(); } private boolean parse() throws ParseException { - if (schema.length() == 0 && args.length == 0) + if (schema.length() == 0 && argsList.size() == 0) return true; parseSchema(); try { @@ -83,8 +83,8 @@ private boolean isIntegerSchemaElement(String elementTail) { } private boolean parseArguments() throws ArgsException { - for (currentArgument = 0; currentArgument < args.length; currentArgument++) { - String arg = args[currentArgument]; + for (currentArgument = argsList.iterator(); currentArgument.hasNext(); ) { + String arg = currentArgument.next(); parseArgument(arg); } return true; @@ -131,12 +131,11 @@ else if (m instanceof IntegerArgumentMarshaler) } private void setIntArg(ArgumentMarshaler m) throws ArgsException { - currentArgument++; String parameter = null; try { - parameter = args[currentArgument]; + parameter = currentArgument.next(); m.set(parameter); - } catch (ArrayIndexOutOfBoundsException e) { + } catch (NoSuchElementException e) { errorCode = ErrorCode.MISSING_INTEGER; throw new ArgsException(); } catch (ArgsException e) { @@ -147,10 +146,9 @@ private void setIntArg(ArgumentMarshaler m) throws ArgsException { } private void setStringArg(ArgumentMarshaler m) throws ArgsException { - currentArgument++; try { - m.set(args[currentArgument]); - } catch (ArrayIndexOutOfBoundsException e) { + m.set(currentArgument.next()); + } catch (NoSuchElementException e) { errorCode = ErrorCode.MISSING_STRING; throw new ArgsException(); } From 7326f87675f21693fe86a041982b10b53db80b45 Mon Sep 17 00:00:00 2001 From: viiviii Date: Thu, 12 May 2022 10:21:06 +0900 Subject: [PATCH 2/7] =?UTF-8?q?2.=20setArgument()=EC=9D=98=20if-else=20?= =?UTF-8?q?=EC=97=B0=EC=87=84=EB=A5=BC=20=EC=A0=9C=EA=B1=B0=ED=95=98?= =?UTF-8?q?=EA=B8=B0=20=EC=9C=84=ED=95=B4=20=EC=98=A4=EB=A5=98=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=EC=9D=84=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chapter14/args/Args.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/chapter14/args/Args.java b/src/main/java/chapter14/args/Args.java index fed1dbb..b4a13af 100644 --- a/src/main/java/chapter14/args/Args.java +++ b/src/main/java/chapter14/args/Args.java @@ -113,6 +113,8 @@ private void parseElement(char argChar) throws ArgsException { private boolean setArgument(char argChar) throws ArgsException { ArgumentMarshaler m = marshalers.get(argChar); + if (m == null) + return false; try { if (m instanceof BooleanArgumentMarshaler) setBooleanArg(m); @@ -120,8 +122,6 @@ else if (m instanceof StringArgumentMarshaler) setStringArg(m); else if (m instanceof IntegerArgumentMarshaler) setIntArg(m); - else - return false; } catch (ArgsException e) { valid = false; errorArgumentId = argChar; From 74a4d3908cac776245bd2123e79441f0cf421e7a Mon Sep 17 00:00:00 2001 From: viiviii Date: Thu, 12 May 2022 10:26:40 +0900 Subject: [PATCH 3/7] =?UTF-8?q?3.=20setBooleanArg()=EA=B0=80=20Iterator?= =?UTF-8?q?=EB=A5=BC=20=ED=8C=8C=EB=9D=BC=EB=AF=B8=ED=84=B0=EB=A1=9C=20?= =?UTF-8?q?=EB=B0=9B=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chapter14/args/Args.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/main/java/chapter14/args/Args.java b/src/main/java/chapter14/args/Args.java index b4a13af..302bec1 100644 --- a/src/main/java/chapter14/args/Args.java +++ b/src/main/java/chapter14/args/Args.java @@ -117,7 +117,7 @@ private boolean setArgument(char argChar) throws ArgsException { return false; try { if (m instanceof BooleanArgumentMarshaler) - setBooleanArg(m); + setBooleanArg(m, currentArgument); else if (m instanceof StringArgumentMarshaler) setStringArg(m); else if (m instanceof IntegerArgumentMarshaler) @@ -154,11 +154,8 @@ private void setStringArg(ArgumentMarshaler m) throws ArgsException { } } - private void setBooleanArg(ArgumentMarshaler m) { - try { - m.set("true"); - } catch (ArgsException e) { - } + private void setBooleanArg(ArgumentMarshaler m, Iterator currentArgument) throws ArgsException { + m.set("true"); } public int cardinality() { From 862075fbc4d3484a9cb6b10dae7cef1a790ce1c3 Mon Sep 17 00:00:00 2001 From: viiviii Date: Thu, 12 May 2022 10:31:37 +0900 Subject: [PATCH 4/7] =?UTF-8?q?4.=20ArgumentMarshaler=20set()=EC=9D=84=20?= =?UTF-8?q?=EC=A7=81=EC=A0=91=20=EC=82=AC=EC=9A=A9=ED=95=98=EC=97=AC=20set?= =?UTF-8?q?BooleanArg()=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chapter14/args/Args.java | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/main/java/chapter14/args/Args.java b/src/main/java/chapter14/args/Args.java index 302bec1..bcfff5a 100644 --- a/src/main/java/chapter14/args/Args.java +++ b/src/main/java/chapter14/args/Args.java @@ -117,7 +117,7 @@ private boolean setArgument(char argChar) throws ArgsException { return false; try { if (m instanceof BooleanArgumentMarshaler) - setBooleanArg(m, currentArgument); + m.set(currentArgument); else if (m instanceof StringArgumentMarshaler) setStringArg(m); else if (m instanceof IntegerArgumentMarshaler) @@ -154,10 +154,6 @@ private void setStringArg(ArgumentMarshaler m) throws ArgsException { } } - private void setBooleanArg(ArgumentMarshaler m, Iterator currentArgument) throws ArgsException { - m.set("true"); - } - public int cardinality() { return argsFound.size(); } @@ -242,6 +238,8 @@ private class ArgsException extends Exception { private abstract class ArgumentMarshaler { public abstract void set(String s) throws ArgsException; + public abstract void set(Iterator currentArgument) throws ArgsException; + public abstract Object get(); } @@ -249,10 +247,14 @@ private class BooleanArgumentMarshaler extends ArgumentMarshaler { private boolean booleanValue = false; @Override - public void set(String s) { + public void set(Iterator currentArgument) throws ArgsException { booleanValue = true; } + @Override + public void set(String s) { + } + @Override public Object get() { return booleanValue; @@ -262,6 +264,10 @@ public Object get() { private class StringArgumentMarshaler extends ArgumentMarshaler { private String stringValue = ""; + @Override + public void set(Iterator currentArgument) throws ArgsException { + } + @Override public void set(String s) { stringValue = s; @@ -276,6 +282,10 @@ public Object get() { private class IntegerArgumentMarshaler extends ArgumentMarshaler { private int intValue = 0; + @Override + public void set(Iterator currentArgument) throws ArgsException { + } + @Override public void set(String s) throws ArgsException { try { From 1e7331e2f3912cf3ab47a0aacff0a52d5d1e586d Mon Sep 17 00:00:00 2001 From: viiviii Date: Thu, 12 May 2022 10:44:30 +0900 Subject: [PATCH 5/7] =?UTF-8?q?5.=20setStringArg(),=20setIntArg()=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chapter14/args/Args.java | 52 ++++++++++---------------- 1 file changed, 20 insertions(+), 32 deletions(-) diff --git a/src/main/java/chapter14/args/Args.java b/src/main/java/chapter14/args/Args.java index bcfff5a..acaaa3e 100644 --- a/src/main/java/chapter14/args/Args.java +++ b/src/main/java/chapter14/args/Args.java @@ -119,9 +119,9 @@ private boolean setArgument(char argChar) throws ArgsException { if (m instanceof BooleanArgumentMarshaler) m.set(currentArgument); else if (m instanceof StringArgumentMarshaler) - setStringArg(m); + m.set(currentArgument); else if (m instanceof IntegerArgumentMarshaler) - setIntArg(m); + m.set(currentArgument); } catch (ArgsException e) { valid = false; errorArgumentId = argChar; @@ -130,30 +130,6 @@ else if (m instanceof IntegerArgumentMarshaler) return true; } - private void setIntArg(ArgumentMarshaler m) throws ArgsException { - String parameter = null; - try { - parameter = currentArgument.next(); - m.set(parameter); - } catch (NoSuchElementException e) { - errorCode = ErrorCode.MISSING_INTEGER; - throw new ArgsException(); - } catch (ArgsException e) { - errorParameter = parameter; - errorCode = ErrorCode.INVALID_INTEGER; - throw e; - } - } - - private void setStringArg(ArgumentMarshaler m) throws ArgsException { - try { - m.set(currentArgument.next()); - } catch (NoSuchElementException e) { - errorCode = ErrorCode.MISSING_STRING; - throw new ArgsException(); - } - } - public int cardinality() { return argsFound.size(); } @@ -266,11 +242,16 @@ private class StringArgumentMarshaler extends ArgumentMarshaler { @Override public void set(Iterator currentArgument) throws ArgsException { + try { + stringValue = currentArgument.next(); + } catch (NoSuchElementException e) { + errorCode = ErrorCode.MISSING_STRING; + throw new ArgsException(); + } } @Override public void set(String s) { - stringValue = s; } @Override @@ -284,17 +265,24 @@ private class IntegerArgumentMarshaler extends ArgumentMarshaler { @Override public void set(Iterator currentArgument) throws ArgsException { - } - - @Override - public void set(String s) throws ArgsException { + String parameter = null; try { - intValue = Integer.parseInt(s); + parameter = currentArgument.next(); + intValue = Integer.parseInt(parameter); + } catch (NoSuchElementException e) { + errorCode = ErrorCode.MISSING_INTEGER; + throw new ArgsException(); } catch (NumberFormatException e) { + errorParameter = parameter; + errorCode = ErrorCode.INVALID_INTEGER; throw new ArgsException(); } } + @Override + public void set(String s) throws ArgsException { + } + @Override public Object get() { return intValue; From abfc338e5b624375afb0554aafcca923a446c823 Mon Sep 17 00:00:00 2001 From: viiviii Date: Thu, 12 May 2022 11:35:07 +0900 Subject: [PATCH 6/7] =?UTF-8?q?6.=20setArgument()=EC=9D=98=20=ED=83=80?= =?UTF-8?q?=EC=9E=85=EC=9D=84=20=EC=9D=BC=EC=9D=BC=ED=9E=88=20=ED=99=95?= =?UTF-8?q?=EC=9D=B8=ED=95=98=EB=8D=98=20=EC=BD=94=EB=93=9C=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chapter14/args/Args.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/main/java/chapter14/args/Args.java b/src/main/java/chapter14/args/Args.java index acaaa3e..1882797 100644 --- a/src/main/java/chapter14/args/Args.java +++ b/src/main/java/chapter14/args/Args.java @@ -116,18 +116,13 @@ private boolean setArgument(char argChar) throws ArgsException { if (m == null) return false; try { - if (m instanceof BooleanArgumentMarshaler) - m.set(currentArgument); - else if (m instanceof StringArgumentMarshaler) - m.set(currentArgument); - else if (m instanceof IntegerArgumentMarshaler) - m.set(currentArgument); + m.set(currentArgument); + return true; } catch (ArgsException e) { valid = false; errorArgumentId = argChar; throw e; } - return true; } public int cardinality() { From 579376212146d069cd8b0f57a7a5785800305003 Mon Sep 17 00:00:00 2001 From: viiviii Date: Thu, 12 May 2022 11:37:30 +0900 Subject: [PATCH 7/7] =?UTF-8?q?7.=20ArgumentMarshaler=EB=A5=BC=20=EC=9D=B8?= =?UTF-8?q?=ED=84=B0=ED=8E=98=EC=9D=B4=EC=8A=A4=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chapter14/args/Args.java | 26 ++++++-------------------- 1 file changed, 6 insertions(+), 20 deletions(-) diff --git a/src/main/java/chapter14/args/Args.java b/src/main/java/chapter14/args/Args.java index 1882797..60e6b82 100644 --- a/src/main/java/chapter14/args/Args.java +++ b/src/main/java/chapter14/args/Args.java @@ -206,15 +206,13 @@ public boolean isValid() { private class ArgsException extends Exception { } - private abstract class ArgumentMarshaler { - public abstract void set(String s) throws ArgsException; + private interface ArgumentMarshaler { + void set(Iterator currentArgument) throws ArgsException; - public abstract void set(Iterator currentArgument) throws ArgsException; - - public abstract Object get(); + Object get(); } - private class BooleanArgumentMarshaler extends ArgumentMarshaler { + private class BooleanArgumentMarshaler implements ArgumentMarshaler { private boolean booleanValue = false; @Override @@ -222,17 +220,13 @@ public void set(Iterator currentArgument) throws ArgsException { booleanValue = true; } - @Override - public void set(String s) { - } - @Override public Object get() { return booleanValue; } } - private class StringArgumentMarshaler extends ArgumentMarshaler { + private class StringArgumentMarshaler implements ArgumentMarshaler { private String stringValue = ""; @Override @@ -245,17 +239,13 @@ public void set(Iterator currentArgument) throws ArgsException { } } - @Override - public void set(String s) { - } - @Override public Object get() { return stringValue; } } - private class IntegerArgumentMarshaler extends ArgumentMarshaler { + private class IntegerArgumentMarshaler implements ArgumentMarshaler { private int intValue = 0; @Override @@ -274,10 +264,6 @@ public void set(Iterator currentArgument) throws ArgsException { } } - @Override - public void set(String s) throws ArgsException { - } - @Override public Object get() { return intValue;