Be strict about boolean arguments 70/58270/42
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 5 Jun 2017 16:55:50 +0000 (18:55 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Wed, 14 Jun 2017 12:23:48 +0000 (14:23 +0200)
RFC6020 and RFC7950 mandate the argument to be either 'true' or 'false',
which is different from Boolean.valueOf(String), which accepts any
string. Fix this by providing our own parse method.

Change-Id: I87d39d5a9238f79cb34c66efa08ed67c2a02eb82
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ConfigStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/MandatoryStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RequireInstanceStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/Utils.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/YinElementStatementImpl.java

index bf898379bbfb43a8ec56949e5afe40e83f148322..af404a26a4e46b32c0f81aa59b46fe0a801a06f6 100644 (file)
@@ -34,7 +34,7 @@ public class ConfigStatementImpl extends AbstractDeclaredStatement<Boolean> impl
 
         @Override
         public Boolean parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-            return Boolean.valueOf(value);
+            return Utils.parseBoolean(ctx, value);
         }
 
         @Override
index 5096e904f53d9ce0c54da9475e70ee436c6a88fc..6155c1857566c9530b65ce93dd6364a93bfc223c 100644 (file)
@@ -35,7 +35,7 @@ public class MandatoryStatementImpl extends AbstractDeclaredStatement<Boolean> i
 
         @Override
         public Boolean parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-            return Boolean.valueOf(value);
+            return Utils.parseBoolean(ctx, value);
         }
 
         @Override
index 49cd93fe8749fd073809f2d0b83fc24e6e02eb9c..47ab493ece71526dd0aa0133434b886c030471cf 100644 (file)
@@ -34,7 +34,7 @@ public class RequireInstanceStatementImpl extends
 
         @Override
         public Boolean parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-            return Boolean.valueOf(value);
+            return Utils.parseBoolean(ctx, value);
         }
 
         @Override
index bce189b6df16bcfba55e29b3868356a72e543fb7..677b9b3456c77a00a227c1023a9b48cf71c0d15b 100644 (file)
@@ -22,6 +22,7 @@ import java.util.List;
 import java.util.Set;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.annotation.RegEx;
 import javax.xml.xpath.XPath;
@@ -272,6 +273,18 @@ public final class Utils {
         return (StatementContextBase<?, ?, ?>) rootStmtCtx.getFromNamespace(SchemaNodeIdentifierBuildNamespace.class, node);
     }
 
+    static @Nonnull Boolean parseBoolean(final StmtContext<?, ?, ?> ctx, final String input) {
+        if ("true".equals(input)) {
+            return Boolean.TRUE;
+        } else if ("false".equals(input)) {
+            return Boolean.FALSE;
+        } else {
+            throw new SourceException(ctx.getStatementSourceReference(),
+                "Invalid '%s' statement %s '%s', it can be either 'true' or 'false'",
+                ctx.getPublicDefinition().getStatementName(), ctx.getPublicDefinition().getArgumentName(), input);
+        }
+    }
+
     static String internBoolean(final String input) {
         if ("true".equals(input)) {
             return "true";
index 2d309291c10db17d8cf2af64c04a5066f934b3aa..64cdc2da4b63051dbe16dcfd506a564e0c3c6617 100644 (file)
@@ -34,7 +34,7 @@ public class YinElementStatementImpl extends AbstractDeclaredStatement<Boolean>
 
         @Override
         public Boolean parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-            return Boolean.valueOf(value);
+            return Utils.parseBoolean(ctx, value);
         }
 
         @Override
@@ -61,6 +61,6 @@ public class YinElementStatementImpl extends AbstractDeclaredStatement<Boolean>
 
     @Override
     public boolean getValue() {
-        return argument();
+        return argument().booleanValue();
     }
 }