From d6a13b831bbb2dfe1e999de1f9b993540135e155 Mon Sep 17 00:00:00 2001 From: viiviii Date: Wed, 11 May 2022 19:20:08 +0900 Subject: [PATCH 01/15] =?UTF-8?q?1.=20ArgumentMarshaler=20class=20?= =?UTF-8?q?=EA=B3=A8=EA=B2=A9=20=EC=B6=94=EA=B0=80=20(=EB=AA=A9=EB=A1=9D?= =?UTF-8?q?=2014-11)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chapter14/args/Args.java | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/main/java/chapter14/args/Args.java b/src/main/java/chapter14/args/Args.java index 1f4429a..8a2609d 100644 --- a/src/main/java/chapter14/args/Args.java +++ b/src/main/java/chapter14/args/Args.java @@ -260,4 +260,25 @@ public boolean isValid() { private class ArgsException extends Exception { } + + private class ArgumentMarshaler { + private boolean booleanValue = false; + + public void setBoolean(boolean value) { + this.booleanValue = value; + } + + public boolean getBoolean() { + return booleanValue; + } + } + + private class BooleanArgumentMarshaler extends ArgumentMarshaler { + } + + private class StringArgumentMarshaler extends ArgumentMarshaler { + } + + private class IntegerArgumentMarshaler extends ArgumentMarshaler { + } } From 7ff85fe41449777b826e7aca1d2523a7f308bd02 Mon Sep 17 00:00:00 2001 From: viiviii Date: Wed, 11 May 2022 19:31:51 +0900 Subject: [PATCH 02/15] =?UTF-8?q?2.=20booleanArgs=EC=9D=98=20=EC=9D=B8?= =?UTF-8?q?=EC=88=98=20=ED=83=80=EC=9E=85=EC=9D=84=20ArgumentMarshaler?= =?UTF-8?q?=EB=A1=9C=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 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/chapter14/args/Args.java b/src/main/java/chapter14/args/Args.java index 8a2609d..e17de7c 100644 --- a/src/main/java/chapter14/args/Args.java +++ b/src/main/java/chapter14/args/Args.java @@ -8,7 +8,7 @@ public class Args { private String[] args; private boolean valid = true; private Set unexpectedArguments = new TreeSet<>(); - private Map booleanArgs = new HashMap<>(); + private Map booleanArgs = new HashMap<>(); private Map stringArgs = new HashMap<>(); private Map intArgs = new HashMap<>(); private Set argsFound = new HashSet<>(); @@ -73,7 +73,7 @@ private void validateSchemaElementId(char elementId) throws ParseException { } private void parseBooleanSchemaElement(char elementId) { - booleanArgs.put(elementId, false); + booleanArgs.put(elementId, new BooleanArgumentMarshaler()); } private void parseIntegerSchemaElement(char elementId) { @@ -178,7 +178,7 @@ private boolean isStringArg(char argChar) { } private void setBooleanArg(char argChar, boolean value) { - booleanArgs.put(argChar, value); + booleanArgs.get(argChar).setBoolean(value); } private boolean isBooleanArg(char argChar) { @@ -247,7 +247,7 @@ public int getInt(char arg) { } public boolean getBoolean(char arg) { - return falseIfNull(booleanArgs.get(arg)); + return falseIfNull(booleanArgs.get(arg).getBoolean()); } public boolean has(char arg) { From d3dcd02f6a9f65a5eb56a9309cc6ef06607c9c06 Mon Sep 17 00:00:00 2001 From: viiviii Date: Wed, 11 May 2022 20:06:42 +0900 Subject: [PATCH 03/15] =?UTF-8?q?3.=20getBoolean()=20NullPointException=20?= =?UTF-8?q?=EB=B0=9C=EC=83=9D=ED=95=98=EB=8A=94=20=EA=B2=BD=EC=9A=B0=20?= =?UTF-8?q?=EC=B2=98=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 | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/main/java/chapter14/args/Args.java b/src/main/java/chapter14/args/Args.java index e17de7c..392d705 100644 --- a/src/main/java/chapter14/args/Args.java +++ b/src/main/java/chapter14/args/Args.java @@ -226,10 +226,6 @@ private String unexpectedArgumentMessage() { return message.toString(); } - private boolean falseIfNull(Boolean b) { - return b == null ? false : b; - } - private int zeroIfNull(Integer i) { return i == null ? 0 : i; } @@ -247,7 +243,8 @@ public int getInt(char arg) { } public boolean getBoolean(char arg) { - return falseIfNull(booleanArgs.get(arg).getBoolean()); + ArgumentMarshaler am = booleanArgs.get(arg); + return am != null && am.getBoolean(); } public boolean has(char arg) { From b39bf369a0e5b3db8aaae3e298b3e9fde3a5cbc2 Mon Sep 17 00:00:00 2001 From: viiviii Date: Wed, 11 May 2022 20:13:17 +0900 Subject: [PATCH 04/15] =?UTF-8?q?4.=20StringArgs=EB=8F=84=20=EC=9D=B4?= =?UTF-8?q?=EC=A0=84=20=EB=8B=A8=EA=B3=84=EC=B2=98=EB=9F=BC=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 | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/main/java/chapter14/args/Args.java b/src/main/java/chapter14/args/Args.java index 392d705..81dbdf5 100644 --- a/src/main/java/chapter14/args/Args.java +++ b/src/main/java/chapter14/args/Args.java @@ -9,7 +9,7 @@ public class Args { private boolean valid = true; private Set unexpectedArguments = new TreeSet<>(); private Map booleanArgs = new HashMap<>(); - private Map stringArgs = new HashMap<>(); + private Map stringArgs = new HashMap<>(); private Map intArgs = new HashMap<>(); private Set argsFound = new HashSet<>(); private int currentArgument; @@ -81,7 +81,7 @@ private void parseIntegerSchemaElement(char elementId) { } private void parseStringSchemaElement(char elementId) { - stringArgs.put(elementId, ""); + stringArgs.put(elementId, new StringArgumentMarshaler()); } private boolean isStringSchemaElement(String elementTail) { @@ -165,7 +165,7 @@ private void setIntArg(char argChar) throws ArgsException { private void setStringArg(char argChar) { currentArgument++; try { - stringArgs.put(argChar, args[currentArgument]); + stringArgs.get(argChar).setString(args[currentArgument]); } catch (ArrayIndexOutOfBoundsException e) { valid = false; errorArgumentId = argChar; @@ -230,12 +230,9 @@ private int zeroIfNull(Integer i) { return i == null ? 0 : i; } - private String blankIfNull(String s) { - return s == null ? "" : s; - } - public String getString(char arg) { - return blankIfNull(stringArgs.get(arg)); + ArgumentMarshaler am = stringArgs.get(arg); + return am == null ? "" : am.getString(); } public int getInt(char arg) { @@ -260,6 +257,7 @@ private class ArgsException extends Exception { private class ArgumentMarshaler { private boolean booleanValue = false; + private String stringValue; public void setBoolean(boolean value) { this.booleanValue = value; @@ -268,6 +266,14 @@ public void setBoolean(boolean value) { public boolean getBoolean() { return booleanValue; } + + public void setString(String value) { + stringValue = value; + } + + public String getString() { + return stringValue == null ? "" : stringValue; + } } private class BooleanArgumentMarshaler extends ArgumentMarshaler { From af84bd48abae3b7ce1b9b54bb494f4e2b4eb2fa7 Mon Sep 17 00:00:00 2001 From: viiviii Date: Wed, 11 May 2022 20:17:56 +0900 Subject: [PATCH 05/15] =?UTF-8?q?5.=20intArgs=EB=8F=84=20=EC=9D=B4?= =?UTF-8?q?=EC=A0=84=20=EB=8B=A8=EA=B3=84=EC=B2=98=EB=9F=BC=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 | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/main/java/chapter14/args/Args.java b/src/main/java/chapter14/args/Args.java index 81dbdf5..862bdae 100644 --- a/src/main/java/chapter14/args/Args.java +++ b/src/main/java/chapter14/args/Args.java @@ -10,7 +10,7 @@ public class Args { private Set unexpectedArguments = new TreeSet<>(); private Map booleanArgs = new HashMap<>(); private Map stringArgs = new HashMap<>(); - private Map intArgs = new HashMap<>(); + private Map intArgs = new HashMap<>(); private Set argsFound = new HashSet<>(); private int currentArgument; private char errorArgumentId = '\0'; @@ -77,7 +77,7 @@ private void parseBooleanSchemaElement(char elementId) { } private void parseIntegerSchemaElement(char elementId) { - intArgs.put(elementId, 0); + intArgs.put(elementId, new IntegerArgumentMarshaler()); } private void parseStringSchemaElement(char elementId) { @@ -147,7 +147,7 @@ private void setIntArg(char argChar) throws ArgsException { String parameter = null; try { parameter = args[currentArgument]; - intArgs.put(argChar, new Integer(parameter)); + intArgs.get(argChar).setInteger(new Integer(parameter)); } catch (ArrayIndexOutOfBoundsException e) { valid = false; errorArgumentId = argChar; @@ -226,17 +226,14 @@ private String unexpectedArgumentMessage() { return message.toString(); } - private int zeroIfNull(Integer i) { - return i == null ? 0 : i; - } - public String getString(char arg) { ArgumentMarshaler am = stringArgs.get(arg); return am == null ? "" : am.getString(); } public int getInt(char arg) { - return zeroIfNull(intArgs.get(arg)); + ArgumentMarshaler am = intArgs.get(arg); + return am == null ? 0 : am.getInteger(); } public boolean getBoolean(char arg) { @@ -258,6 +255,7 @@ private class ArgsException extends Exception { private class ArgumentMarshaler { private boolean booleanValue = false; private String stringValue; + private int integerValue; public void setBoolean(boolean value) { this.booleanValue = value; @@ -274,6 +272,14 @@ public void setString(String value) { public String getString() { return stringValue == null ? "" : stringValue; } + + public void setInteger(int i) { + integerValue = i; + } + + public int getInteger() { + return integerValue; + } } private class BooleanArgumentMarshaler extends ArgumentMarshaler { From 363c9d9e14912cd3c787fce3194c0d775caeb6c7 Mon Sep 17 00:00:00 2001 From: viiviii Date: Thu, 12 May 2022 07:46:09 +0900 Subject: [PATCH 06/15] =?UTF-8?q?6.=20ArgumentMarshaler=EC=97=90=20?= =?UTF-8?q?=EC=9E=88=EB=8A=94=20boolean=20=EA=B4=80=EB=A0=A8=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=EC=9D=84=20subclass=EC=9D=B8=20BooleanArgumentMarshal?= =?UTF-8?q?er=EB=A1=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chapter14/args/Args.java | 34 +++++++++++++++----------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/src/main/java/chapter14/args/Args.java b/src/main/java/chapter14/args/Args.java index 862bdae..efc79b2 100644 --- a/src/main/java/chapter14/args/Args.java +++ b/src/main/java/chapter14/args/Args.java @@ -127,7 +127,7 @@ private void parseElement(char argChar) throws ArgsException { private boolean setArgument(char argChar) throws ArgsException { if (isBooleanArg(argChar)) - setBooleanArg(argChar, true); + setBooleanArg(argChar); else if (isStringArg(argChar)) setStringArg(argChar); else if (isIntArg(argChar)) @@ -177,8 +177,8 @@ private boolean isStringArg(char argChar) { return stringArgs.containsKey(argChar); } - private void setBooleanArg(char argChar, boolean value) { - booleanArgs.get(argChar).setBoolean(value); + private void setBooleanArg(char argChar) { + booleanArgs.get(argChar).set("true"); } private boolean isBooleanArg(char argChar) { @@ -238,7 +238,7 @@ public int getInt(char arg) { public boolean getBoolean(char arg) { ArgumentMarshaler am = booleanArgs.get(arg); - return am != null && am.getBoolean(); + return am != null && (Boolean) am.get(); } public boolean has(char arg) { @@ -252,19 +252,10 @@ public boolean isValid() { private class ArgsException extends Exception { } - private class ArgumentMarshaler { - private boolean booleanValue = false; + private abstract class ArgumentMarshaler { private String stringValue; private int integerValue; - public void setBoolean(boolean value) { - this.booleanValue = value; - } - - public boolean getBoolean() { - return booleanValue; - } - public void setString(String value) { stringValue = value; } @@ -280,9 +271,24 @@ public void setInteger(int i) { public int getInteger() { return integerValue; } + + public abstract void set(String s); + + public abstract Object get(); } private class BooleanArgumentMarshaler extends ArgumentMarshaler { + private boolean booleanValue = false; + + @Override + public void set(String s) { + booleanValue = true; + } + + @Override + public Object get() { + return booleanValue; + } } private class StringArgumentMarshaler extends ArgumentMarshaler { From 6c0efbfe92ed09c4a93a74d10ab5cc4aa46887c9 Mon Sep 17 00:00:00 2001 From: viiviii Date: Thu, 12 May 2022 08:01:49 +0900 Subject: [PATCH 07/15] =?UTF-8?q?7.=20String=20=EB=A1=9C=EC=A7=81=EB=8F=84?= =?UTF-8?q?=20StringArgumentMarshaler=EB=A1=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chapter14/args/Args.java | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/main/java/chapter14/args/Args.java b/src/main/java/chapter14/args/Args.java index efc79b2..7fab064 100644 --- a/src/main/java/chapter14/args/Args.java +++ b/src/main/java/chapter14/args/Args.java @@ -165,7 +165,7 @@ private void setIntArg(char argChar) throws ArgsException { private void setStringArg(char argChar) { currentArgument++; try { - stringArgs.get(argChar).setString(args[currentArgument]); + stringArgs.get(argChar).set(args[currentArgument]); } catch (ArrayIndexOutOfBoundsException e) { valid = false; errorArgumentId = argChar; @@ -228,7 +228,7 @@ private String unexpectedArgumentMessage() { public String getString(char arg) { ArgumentMarshaler am = stringArgs.get(arg); - return am == null ? "" : am.getString(); + return am == null ? "" : (String) am.get(); } public int getInt(char arg) { @@ -253,17 +253,8 @@ private class ArgsException extends Exception { } private abstract class ArgumentMarshaler { - private String stringValue; private int integerValue; - public void setString(String value) { - stringValue = value; - } - - public String getString() { - return stringValue == null ? "" : stringValue; - } - public void setInteger(int i) { integerValue = i; } @@ -292,6 +283,17 @@ public Object get() { } private class StringArgumentMarshaler extends ArgumentMarshaler { + private String stringValue = ""; + + @Override + public void set(String s) { + stringValue = s; + } + + @Override + public Object get() { + return stringValue; + } } private class IntegerArgumentMarshaler extends ArgumentMarshaler { From 261b410d8b54ba1c78257452924273f48b7dd8d4 Mon Sep 17 00:00:00 2001 From: viiviii Date: Thu, 12 May 2022 08:18:42 +0900 Subject: [PATCH 08/15] =?UTF-8?q?8.=20int=20=EB=A1=9C=EC=A7=81=EB=8F=84=20?= =?UTF-8?q?IntergerArgumentMarshaler=EB=A1=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chapter14/args/Args.java | 43 ++++++++++++++++---------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/src/main/java/chapter14/args/Args.java b/src/main/java/chapter14/args/Args.java index 7fab064..47e1ad5 100644 --- a/src/main/java/chapter14/args/Args.java +++ b/src/main/java/chapter14/args/Args.java @@ -147,22 +147,22 @@ private void setIntArg(char argChar) throws ArgsException { String parameter = null; try { parameter = args[currentArgument]; - intArgs.get(argChar).setInteger(new Integer(parameter)); + intArgs.get(argChar).set(parameter); } catch (ArrayIndexOutOfBoundsException e) { valid = false; errorArgumentId = argChar; errorCode = ErrorCode.MISSING_INTEGER; throw new ArgsException(); - } catch (NumberFormatException e) { + } catch (ArgsException e) { valid = false; errorArgumentId = argChar; errorParameter = parameter; errorCode = ErrorCode.INVALID_INTEGER; - throw new ArgsException(); + throw e; } } - private void setStringArg(char argChar) { + private void setStringArg(char argChar) throws ArgsException { currentArgument++; try { stringArgs.get(argChar).set(args[currentArgument]); @@ -170,6 +170,7 @@ private void setStringArg(char argChar) { valid = false; errorArgumentId = argChar; errorCode = ErrorCode.MISSING_STRING; + throw new ArgsException(); } } @@ -178,7 +179,10 @@ private boolean isStringArg(char argChar) { } private void setBooleanArg(char argChar) { - booleanArgs.get(argChar).set("true"); + try { + booleanArgs.get(argChar).set("true"); + } catch (ArgsException e) { + } } private boolean isBooleanArg(char argChar) { @@ -233,7 +237,7 @@ public String getString(char arg) { public int getInt(char arg) { ArgumentMarshaler am = intArgs.get(arg); - return am == null ? 0 : am.getInteger(); + return am == null ? 0 : (Integer) am.get(); } public boolean getBoolean(char arg) { @@ -253,17 +257,7 @@ private class ArgsException extends Exception { } private abstract class ArgumentMarshaler { - private int integerValue; - - public void setInteger(int i) { - integerValue = i; - } - - public int getInteger() { - return integerValue; - } - - public abstract void set(String s); + public abstract void set(String s) throws ArgsException; public abstract Object get(); } @@ -297,5 +291,20 @@ public Object get() { } private class IntegerArgumentMarshaler extends ArgumentMarshaler { + private int intValue = 0; + + @Override + public void set(String s) throws ArgsException { + try { + intValue = Integer.parseInt(s); + } catch (NumberFormatException e) { + throw new ArgsException(); + } + } + + @Override + public Object get() { + return intValue; + } } } From 3e22ab607b1c3a335f45794963426b35850b8eec Mon Sep 17 00:00:00 2001 From: viiviii Date: Thu, 12 May 2022 08:35:55 +0900 Subject: [PATCH 09/15] =?UTF-8?q?9.=20Args=20Map=203=EA=B0=9C=EB=A5=BC=20?= =?UTF-8?q?=EC=97=86=EC=95=A0=EA=B8=B0=20=EC=9C=84=ED=95=B4=20marshalers?= =?UTF-8?q?=20map=EC=9D=84=20=EB=A7=8C=EB=93=A4=EC=96=B4=20=EA=B5=90?= =?UTF-8?q?=EC=B2=B4?= 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 47e1ad5..58d27bc 100644 --- a/src/main/java/chapter14/args/Args.java +++ b/src/main/java/chapter14/args/Args.java @@ -11,6 +11,7 @@ public class Args { private Map booleanArgs = new HashMap<>(); private Map stringArgs = new HashMap<>(); private Map intArgs = new HashMap<>(); + private Map marshalers = new HashMap<>(); private Set argsFound = new HashSet<>(); private int currentArgument; private char errorArgumentId = '\0'; @@ -73,15 +74,21 @@ private void validateSchemaElementId(char elementId) throws ParseException { } private void parseBooleanSchemaElement(char elementId) { - booleanArgs.put(elementId, new BooleanArgumentMarshaler()); + ArgumentMarshaler m = new BooleanArgumentMarshaler(); + booleanArgs.put(elementId, m); + marshalers.put(elementId, m); } private void parseIntegerSchemaElement(char elementId) { - intArgs.put(elementId, new IntegerArgumentMarshaler()); + ArgumentMarshaler m = new IntegerArgumentMarshaler(); + intArgs.put(elementId, m); + marshalers.put(elementId, m); } private void parseStringSchemaElement(char elementId) { - stringArgs.put(elementId, new StringArgumentMarshaler()); + ArgumentMarshaler m = new StringArgumentMarshaler(); + stringArgs.put(elementId, m); + marshalers.put(elementId, m); } private boolean isStringSchemaElement(String elementTail) { @@ -139,7 +146,8 @@ else if (isIntArg(argChar)) } private boolean isIntArg(char argChar) { - return intArgs.containsKey(argChar); + ArgumentMarshaler m = marshalers.get(argChar); + return m instanceof IntegerArgumentMarshaler; } private void setIntArg(char argChar) throws ArgsException { @@ -175,7 +183,8 @@ private void setStringArg(char argChar) throws ArgsException { } private boolean isStringArg(char argChar) { - return stringArgs.containsKey(argChar); + ArgumentMarshaler m = marshalers.get(argChar); + return m instanceof StringArgumentMarshaler; } private void setBooleanArg(char argChar) { @@ -186,7 +195,8 @@ private void setBooleanArg(char argChar) { } private boolean isBooleanArg(char argChar) { - return booleanArgs.containsKey(argChar); + ArgumentMarshaler m = marshalers.get(argChar); + return m instanceof BooleanArgumentMarshaler; } public int cardinality() { From 55eb7df55f2e7714af45060a4dd79382576ce13e Mon Sep 17 00:00:00 2001 From: viiviii Date: Thu, 12 May 2022 08:38:44 +0900 Subject: [PATCH 10/15] =?UTF-8?q?10:=20marshalers.get()=20=ED=98=B8?= =?UTF-8?q?=EC=B6=9C=20=EC=BD=94=EB=93=9C=20=EC=A0=9C=EA=B1=B0=ED=95=98?= =?UTF-8?q?=EC=97=AC=20=ED=95=9C=20=EA=B3=B3=EC=97=90=EC=84=9C=20=EC=B2=98?= =?UTF-8?q?=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 | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/main/java/chapter14/args/Args.java b/src/main/java/chapter14/args/Args.java index 58d27bc..de9a2e3 100644 --- a/src/main/java/chapter14/args/Args.java +++ b/src/main/java/chapter14/args/Args.java @@ -133,11 +133,12 @@ private void parseElement(char argChar) throws ArgsException { } private boolean setArgument(char argChar) throws ArgsException { - if (isBooleanArg(argChar)) + ArgumentMarshaler m = marshalers.get(argChar); + if (isBooleanArg(m)) setBooleanArg(argChar); - else if (isStringArg(argChar)) + else if (isStringArg(m)) setStringArg(argChar); - else if (isIntArg(argChar)) + else if (isIntArg(m)) setIntArg(argChar); else return false; @@ -145,8 +146,7 @@ else if (isIntArg(argChar)) return true; } - private boolean isIntArg(char argChar) { - ArgumentMarshaler m = marshalers.get(argChar); + private boolean isIntArg(ArgumentMarshaler m) { return m instanceof IntegerArgumentMarshaler; } @@ -182,8 +182,7 @@ private void setStringArg(char argChar) throws ArgsException { } } - private boolean isStringArg(char argChar) { - ArgumentMarshaler m = marshalers.get(argChar); + private boolean isStringArg(ArgumentMarshaler m) { return m instanceof StringArgumentMarshaler; } @@ -194,8 +193,7 @@ private void setBooleanArg(char argChar) { } } - private boolean isBooleanArg(char argChar) { - ArgumentMarshaler m = marshalers.get(argChar); + private boolean isBooleanArg(ArgumentMarshaler m) { return m instanceof BooleanArgumentMarshaler; } From d97fdc2558796c1268c556a543c9b52e7a2b50da Mon Sep 17 00:00:00 2001 From: viiviii Date: Thu, 12 May 2022 08:40:39 +0900 Subject: [PATCH 11/15] =?UTF-8?q?11.=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=B4=EC=A7=84=20isxxxArgs=20=EB=A9=94=EC=84=9C=EB=93=9C?= =?UTF-8?q?=EB=A5=BC=20=EC=9D=B8=EB=9D=BC=EC=9D=B8=20=EC=BD=94=EB=93=9C?= =?UTF-8?q?=EB=A1=9C=20=EB=A7=8C=EB=93=A4=EA=B3=A0=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 | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/src/main/java/chapter14/args/Args.java b/src/main/java/chapter14/args/Args.java index de9a2e3..8c06d8d 100644 --- a/src/main/java/chapter14/args/Args.java +++ b/src/main/java/chapter14/args/Args.java @@ -134,11 +134,11 @@ private void parseElement(char argChar) throws ArgsException { private boolean setArgument(char argChar) throws ArgsException { ArgumentMarshaler m = marshalers.get(argChar); - if (isBooleanArg(m)) + if (m instanceof BooleanArgumentMarshaler) setBooleanArg(argChar); - else if (isStringArg(m)) + else if (m instanceof StringArgumentMarshaler) setStringArg(argChar); - else if (isIntArg(m)) + else if (m instanceof IntegerArgumentMarshaler) setIntArg(argChar); else return false; @@ -146,10 +146,6 @@ else if (isIntArg(m)) return true; } - private boolean isIntArg(ArgumentMarshaler m) { - return m instanceof IntegerArgumentMarshaler; - } - private void setIntArg(char argChar) throws ArgsException { currentArgument++; String parameter = null; @@ -182,10 +178,6 @@ private void setStringArg(char argChar) throws ArgsException { } } - private boolean isStringArg(ArgumentMarshaler m) { - return m instanceof StringArgumentMarshaler; - } - private void setBooleanArg(char argChar) { try { booleanArgs.get(argChar).set("true"); @@ -193,10 +185,6 @@ private void setBooleanArg(char argChar) { } } - private boolean isBooleanArg(ArgumentMarshaler m) { - return m instanceof BooleanArgumentMarshaler; - } - public int cardinality() { return argsFound.size(); } From ff4a5beeb89c10854574749a82734634a17c842a Mon Sep 17 00:00:00 2001 From: viiviii Date: Thu, 12 May 2022 08:50:06 +0900 Subject: [PATCH 12/15] =?UTF-8?q?12.=20setxxx()=EA=B0=80=20ArgumentMarshal?= =?UTF-8?q?er=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=EC=95=84=20=EC=82=AC=EC=9A=A9=ED=95=98=EB=8F=84?= =?UTF-8?q?=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chapter14/args/Args.java | 41 +++++++++++++------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/src/main/java/chapter14/args/Args.java b/src/main/java/chapter14/args/Args.java index 8c06d8d..f9b0910 100644 --- a/src/main/java/chapter14/args/Args.java +++ b/src/main/java/chapter14/args/Args.java @@ -134,53 +134,52 @@ private void parseElement(char argChar) throws ArgsException { private boolean setArgument(char argChar) throws ArgsException { ArgumentMarshaler m = marshalers.get(argChar); - if (m instanceof BooleanArgumentMarshaler) - setBooleanArg(argChar); - else if (m instanceof StringArgumentMarshaler) - setStringArg(argChar); - else if (m instanceof IntegerArgumentMarshaler) - setIntArg(argChar); - else - return false; - + try { + if (m instanceof BooleanArgumentMarshaler) + setBooleanArg(m); + else if (m instanceof StringArgumentMarshaler) + setStringArg(m); + else if (m instanceof IntegerArgumentMarshaler) + setIntArg(m); + else + return false; + } catch (ArgsException e) { + valid = false; + errorArgumentId = argChar; + throw e; + } return true; } - private void setIntArg(char argChar) throws ArgsException { + private void setIntArg(ArgumentMarshaler m) throws ArgsException { currentArgument++; String parameter = null; try { parameter = args[currentArgument]; - intArgs.get(argChar).set(parameter); + m.set(parameter); } catch (ArrayIndexOutOfBoundsException e) { - valid = false; - errorArgumentId = argChar; errorCode = ErrorCode.MISSING_INTEGER; throw new ArgsException(); } catch (ArgsException e) { - valid = false; - errorArgumentId = argChar; errorParameter = parameter; errorCode = ErrorCode.INVALID_INTEGER; throw e; } } - private void setStringArg(char argChar) throws ArgsException { + private void setStringArg(ArgumentMarshaler m) throws ArgsException { currentArgument++; try { - stringArgs.get(argChar).set(args[currentArgument]); + m.set(args[currentArgument]); } catch (ArrayIndexOutOfBoundsException e) { - valid = false; - errorArgumentId = argChar; errorCode = ErrorCode.MISSING_STRING; throw new ArgsException(); } } - private void setBooleanArg(char argChar) { + private void setBooleanArg(ArgumentMarshaler m) { try { - booleanArgs.get(argChar).set("true"); + m.set("true"); } catch (ArgsException e) { } } From 033db7d3a96bb6f54a6f9ef076577637819ed6d5 Mon Sep 17 00:00:00 2001 From: viiviii Date: Thu, 12 May 2022 09:15:04 +0900 Subject: [PATCH 13/15] =?UTF-8?q?13.=20booleanArgs=20Map=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 | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/chapter14/args/Args.java b/src/main/java/chapter14/args/Args.java index f9b0910..577c8c1 100644 --- a/src/main/java/chapter14/args/Args.java +++ b/src/main/java/chapter14/args/Args.java @@ -8,7 +8,6 @@ public class Args { private String[] args; private boolean valid = true; private Set unexpectedArguments = new TreeSet<>(); - private Map booleanArgs = new HashMap<>(); private Map stringArgs = new HashMap<>(); private Map intArgs = new HashMap<>(); private Map marshalers = new HashMap<>(); @@ -75,7 +74,6 @@ private void validateSchemaElementId(char elementId) throws ParseException { private void parseBooleanSchemaElement(char elementId) { ArgumentMarshaler m = new BooleanArgumentMarshaler(); - booleanArgs.put(elementId, m); marshalers.put(elementId, m); } @@ -236,8 +234,14 @@ public int getInt(char arg) { } public boolean getBoolean(char arg) { - ArgumentMarshaler am = booleanArgs.get(arg); - return am != null && (Boolean) am.get(); + ArgumentMarshaler am = marshalers.get(arg); + boolean b = false; + try { + b = am != null && (Boolean) am.get(); + } catch (ClassCastException e) { + b = false; + } + return b; } public boolean has(char arg) { From f4d2ed1695dcef61dbeb6f09e1c67afe95328284 Mon Sep 17 00:00:00 2001 From: viiviii Date: Thu, 12 May 2022 09:18:33 +0900 Subject: [PATCH 14/15] =?UTF-8?q?14.=20stringArgs,=20intArgs=20Map?= =?UTF-8?q?=EB=8F=84=20=EB=AA=A8=EB=91=90=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 | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/main/java/chapter14/args/Args.java b/src/main/java/chapter14/args/Args.java index 577c8c1..967c7b2 100644 --- a/src/main/java/chapter14/args/Args.java +++ b/src/main/java/chapter14/args/Args.java @@ -8,8 +8,6 @@ public class Args { private String[] args; private boolean valid = true; private Set unexpectedArguments = new TreeSet<>(); - private Map stringArgs = new HashMap<>(); - private Map intArgs = new HashMap<>(); private Map marshalers = new HashMap<>(); private Set argsFound = new HashSet<>(); private int currentArgument; @@ -79,13 +77,11 @@ private void parseBooleanSchemaElement(char elementId) { private void parseIntegerSchemaElement(char elementId) { ArgumentMarshaler m = new IntegerArgumentMarshaler(); - intArgs.put(elementId, m); marshalers.put(elementId, m); } private void parseStringSchemaElement(char elementId) { ArgumentMarshaler m = new StringArgumentMarshaler(); - stringArgs.put(elementId, m); marshalers.put(elementId, m); } @@ -224,13 +220,21 @@ private String unexpectedArgumentMessage() { } public String getString(char arg) { - ArgumentMarshaler am = stringArgs.get(arg); - return am == null ? "" : (String) am.get(); + ArgumentMarshaler am = marshalers.get(arg); + try { + return am == null ? "" : (String) am.get(); + } catch (ClassCastException e) { + return ""; + } } public int getInt(char arg) { - ArgumentMarshaler am = intArgs.get(arg); - return am == null ? 0 : (Integer) am.get(); + ArgumentMarshaler am = marshalers.get(arg); + try { + return am == null ? 0 : (Integer) am.get(); + } catch (ClassCastException e) { + return 0; + } } public boolean getBoolean(char arg) { From 1c8adf197ae3bc258aee00894d5080b15133b0da Mon Sep 17 00:00:00 2001 From: viiviii Date: Thu, 12 May 2022 09:21:46 +0900 Subject: [PATCH 15/15] =?UTF-8?q?15.=20=EC=9D=B4=EC=A0=9C=20=EC=9E=98=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=ED=95=98=EC=A7=80=20=EC=95=8A=EB=8A=94=20par?= =?UTF-8?q?se=20=EB=A9=94=EC=84=9C=EB=93=9C=EB=93=A4=EC=9D=84=20=EC=9D=B8?= =?UTF-8?q?=EB=9D=BC=EC=9D=B8=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= =?UTF-8?q?=ED=95=98=EC=97=AC=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 | 29 +++++++------------------- 1 file changed, 7 insertions(+), 22 deletions(-) diff --git a/src/main/java/chapter14/args/Args.java b/src/main/java/chapter14/args/Args.java index 967c7b2..0e79af4 100644 --- a/src/main/java/chapter14/args/Args.java +++ b/src/main/java/chapter14/args/Args.java @@ -50,13 +50,13 @@ private void parseSchemaElement(String element) throws ParseException { char elementId = element.charAt(0); String elementTail = element.substring(1); validateSchemaElementId(elementId); - if (isBooleanSchemaElement(elementTail)) - parseBooleanSchemaElement(elementId); - else if (isStringSchemaElement(elementTail)) - parseStringSchemaElement(elementId); - else if (isIntegerSchemaElement(elementTail)) - parseIntegerSchemaElement(elementId); - else { + if (isBooleanSchemaElement(elementTail)) { + marshalers.put(elementId, new BooleanArgumentMarshaler()); + } else if (isStringSchemaElement(elementTail)) { + marshalers.put(elementId, new StringArgumentMarshaler()); + } else if (isIntegerSchemaElement(elementTail)) { + marshalers.put(elementId, new IntegerArgumentMarshaler()); + } else { throw new ParseException( String.format("Argument: %c has invalid format: %s.", elementId, elementTail), 0); @@ -70,21 +70,6 @@ private void validateSchemaElementId(char elementId) throws ParseException { } } - private void parseBooleanSchemaElement(char elementId) { - ArgumentMarshaler m = new BooleanArgumentMarshaler(); - marshalers.put(elementId, m); - } - - private void parseIntegerSchemaElement(char elementId) { - ArgumentMarshaler m = new IntegerArgumentMarshaler(); - marshalers.put(elementId, m); - } - - private void parseStringSchemaElement(char elementId) { - ArgumentMarshaler m = new StringArgumentMarshaler(); - marshalers.put(elementId, m); - } - private boolean isStringSchemaElement(String elementTail) { return elementTail.equals("*"); }