string issue fix for few yang construct like config, mandatory + allowing yang constructs as identifers and string
Change-Id: I8dd01dc60d280a843b0a485681caa6bfcac013c2
diff --git a/src/main/java/org/onosproject/yangutils/parser/impl/listeners/MaxElementsListener.java b/src/main/java/org/onosproject/yangutils/parser/impl/listeners/MaxElementsListener.java
index da8a666..cae2433 100644
--- a/src/main/java/org/onosproject/yangutils/parser/impl/listeners/MaxElementsListener.java
+++ b/src/main/java/org/onosproject/yangutils/parser/impl/listeners/MaxElementsListener.java
@@ -22,11 +22,13 @@
import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
import org.onosproject.yangutils.parser.exceptions.ParserException;
import org.onosproject.yangutils.parser.impl.TreeWalkListener;
+import org.onosproject.yangutils.utils.YangConstructType;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
import static org.onosproject.yangutils.utils.YangConstructType.MAX_ELEMENT_DATA;
@@ -40,7 +42,8 @@
* max-value-arg >
*
* ANTLR grammar rule
- * maxElementsStatement : MAX_ELEMENTS_KEYWORD maxValueArgument STMTEND;
+ * maxElementsStatement : MAX_ELEMENTS_KEYWORD maxValue STMTEND;
+ * maxValue : string;
*/
/**
@@ -50,6 +53,9 @@
*/
public final class MaxElementsListener {
+ private static final String POSITIVE_INTEGER_PATTERN = "[1-9][0-9]*";
+ private static final String UNBOUNDED_KEYWORD = "unbounded";
+
/**
* Creates a new max-elements listener.
*/
@@ -65,16 +71,11 @@
*/
public static void processMaxElementsEntry(TreeWalkListener listener,
GeneratedYangParser.MaxElementsStatementContext ctx) {
- int maxElementsValue;
// Check for stack to be non empty.
checkStackIsNotEmpty(listener, MISSING_HOLDER, MAX_ELEMENT_DATA, "", ENTRY);
- if (ctx.maxValueArgument().UNBOUNDED_KEYWORD() != null) {
- maxElementsValue = Integer.MAX_VALUE;
- } else {
- maxElementsValue = Integer.parseInt(ctx.maxValueArgument().INTEGER().getText());
- }
+ int maxElementsValue = getValidMaxElementValue(ctx);
Parsable tmpData = listener.getParsedDataStack().peek();
switch (tmpData.getYangConstructType()) {
@@ -90,4 +91,31 @@
throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, MAX_ELEMENT_DATA, "", ENTRY));
}
}
+
+ /**
+ * Validates max element value and returns the value from context.
+ *
+ * @param ctx context object of the grammar rule
+ * @return max element's value
+ */
+ private static int getValidMaxElementValue(GeneratedYangParser.MaxElementsStatementContext ctx) {
+
+ int maxElementsValue;
+
+ String value = removeQuotesAndHandleConcat(ctx.maxValue().getText());
+ if (value.equals(UNBOUNDED_KEYWORD)) {
+ maxElementsValue = Integer.MAX_VALUE;
+ } else if (value.matches(POSITIVE_INTEGER_PATTERN)) {
+ maxElementsValue = Integer.parseInt(value);
+ } else {
+ ParserException parserException = new ParserException("YANG file error : " +
+ YangConstructType.getYangConstructType(MAX_ELEMENT_DATA) + " value " + value + " is not " +
+ "valid.");
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ }
+
+ return maxElementsValue;
+ }
}
\ No newline at end of file