Vidyashree Rama
Committed by Gerrit Code Review

Identifier issue fix for module, list, container, leaf, leaf-list, prefix + date…

… agr string for revision fix

Change-Id: Id9d596512f35b54f6359d361402bcd0180b71678
Showing 33 changed files with 495 additions and 240 deletions
...@@ -1163,6 +1163,26 @@ public class TreeWalkListener implements GeneratedYangListener { ...@@ -1163,6 +1163,26 @@ public class TreeWalkListener implements GeneratedYangListener {
1163 } 1163 }
1164 1164
1165 @Override 1165 @Override
1166 + public void enterIdentifier(GeneratedYangParser.IdentifierContext ctx) {
1167 + // TODO: implement the method.
1168 + }
1169 +
1170 + @Override
1171 + public void exitIdentifier(GeneratedYangParser.IdentifierContext ctx) {
1172 + // TODO: implement the method.
1173 + }
1174 +
1175 + @Override
1176 + public void enterDateArgumentString(GeneratedYangParser.DateArgumentStringContext ctx) {
1177 + // TODO: implement the method.
1178 + }
1179 +
1180 + @Override
1181 + public void exitDateArgumentString(GeneratedYangParser.DateArgumentStringContext ctx) {
1182 + // TODO: implement the method.
1183 + }
1184 +
1185 + @Override
1166 public void visitTerminal(TerminalNode terminalNode) { 1186 public void visitTerminal(TerminalNode terminalNode) {
1167 // TODO: implement the method. 1187 // TODO: implement the method.
1168 } 1188 }
......
...@@ -22,6 +22,8 @@ import org.onosproject.yangutils.parser.Parsable; ...@@ -22,6 +22,8 @@ import org.onosproject.yangutils.parser.Parsable;
22 import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; 22 import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
23 import org.onosproject.yangutils.parser.exceptions.ParserException; 23 import org.onosproject.yangutils.parser.exceptions.ParserException;
24 import org.onosproject.yangutils.parser.impl.TreeWalkListener; 24 import org.onosproject.yangutils.parser.impl.TreeWalkListener;
25 +
26 +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
25 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; 27 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
26 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT; 28 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
27 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage; 29 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
...@@ -50,7 +52,7 @@ import static org.onosproject.yangutils.utils.YangConstructType.BELONGS_TO_DATA; ...@@ -50,7 +52,7 @@ import static org.onosproject.yangutils.utils.YangConstructType.BELONGS_TO_DATA;
50 * submodule_header_statement : yang_version_stmt? belongs_to_stmt 52 * submodule_header_statement : yang_version_stmt? belongs_to_stmt
51 * | belongs_to_stmt yang_version_stmt? 53 * | belongs_to_stmt yang_version_stmt?
52 * ; 54 * ;
53 - * belongs_to_stmt : BELONGS_TO_KEYWORD IDENTIFIER LEFT_CURLY_BRACE belongs_to_stmt_body RIGHT_CURLY_BRACE; 55 + * belongs_to_stmt : BELONGS_TO_KEYWORD identifier LEFT_CURLY_BRACE belongs_to_stmt_body RIGHT_CURLY_BRACE;
54 * belongs_to_stmt_body : prefix_stmt; 56 * belongs_to_stmt_body : prefix_stmt;
55 */ 57 */
56 58
...@@ -78,11 +80,13 @@ public final class BelongsToListener { ...@@ -78,11 +80,13 @@ public final class BelongsToListener {
78 GeneratedYangParser.BelongstoStatementContext ctx) { 80 GeneratedYangParser.BelongstoStatementContext ctx) {
79 81
80 // Check for stack to be non empty. 82 // Check for stack to be non empty.
81 - checkStackIsNotEmpty(listener, MISSING_HOLDER, BELONGS_TO_DATA, ctx.IDENTIFIER().getText(), 83 + checkStackIsNotEmpty(listener, MISSING_HOLDER, BELONGS_TO_DATA, ctx.identifier().getText(),
82 ENTRY); 84 ENTRY);
83 85
86 + String identifier = getValidIdentifier(ctx.identifier().getText(), BELONGS_TO_DATA, ctx);
87 +
84 YangBelongsTo belongstoNode = new YangBelongsTo(); 88 YangBelongsTo belongstoNode = new YangBelongsTo();
85 - belongstoNode.setBelongsToModuleName(ctx.IDENTIFIER().getText()); 89 + belongstoNode.setBelongsToModuleName(identifier);
86 90
87 // Push belongsto into the stack. 91 // Push belongsto into the stack.
88 listener.getParsedDataStack().push(belongstoNode); 92 listener.getParsedDataStack().push(belongstoNode);
...@@ -99,7 +103,7 @@ public final class BelongsToListener { ...@@ -99,7 +103,7 @@ public final class BelongsToListener {
99 GeneratedYangParser.BelongstoStatementContext ctx) { 103 GeneratedYangParser.BelongstoStatementContext ctx) {
100 104
101 // Check for stack to be non empty. 105 // Check for stack to be non empty.
102 - checkStackIsNotEmpty(listener, MISSING_HOLDER, BELONGS_TO_DATA, ctx.IDENTIFIER().getText(), 106 + checkStackIsNotEmpty(listener, MISSING_HOLDER, BELONGS_TO_DATA, ctx.identifier().getText(),
103 EXIT); 107 EXIT);
104 108
105 Parsable tmpBelongstoNode = listener.getParsedDataStack().peek(); 109 Parsable tmpBelongstoNode = listener.getParsedDataStack().peek();
...@@ -108,7 +112,7 @@ public final class BelongsToListener { ...@@ -108,7 +112,7 @@ public final class BelongsToListener {
108 112
109 // Check for stack to be empty. 113 // Check for stack to be empty.
110 checkStackIsNotEmpty(listener, MISSING_HOLDER, BELONGS_TO_DATA, 114 checkStackIsNotEmpty(listener, MISSING_HOLDER, BELONGS_TO_DATA,
111 - ctx.IDENTIFIER().getText(), EXIT); 115 + ctx.identifier().getText(), EXIT);
112 116
113 Parsable tmpNode = listener.getParsedDataStack().peek(); 117 Parsable tmpNode = listener.getParsedDataStack().peek();
114 switch (tmpNode.getYangConstructType()) { 118 switch (tmpNode.getYangConstructType()) {
...@@ -119,12 +123,12 @@ public final class BelongsToListener { ...@@ -119,12 +123,12 @@ public final class BelongsToListener {
119 } 123 }
120 default: 124 default:
121 throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, BELONGS_TO_DATA, 125 throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, BELONGS_TO_DATA,
122 - ctx.IDENTIFIER().getText(), 126 + ctx.identifier().getText(),
123 EXIT)); 127 EXIT));
124 } 128 }
125 } else { 129 } else {
126 throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, BELONGS_TO_DATA, 130 throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, BELONGS_TO_DATA,
127 - ctx.IDENTIFIER().getText(), EXIT)); 131 + ctx.identifier().getText(), EXIT));
128 } 132 }
129 } 133 }
130 } 134 }
......
...@@ -32,7 +32,7 @@ package org.onosproject.yangutils.parser.impl.listeners; ...@@ -32,7 +32,7 @@ package org.onosproject.yangutils.parser.impl.listeners;
32 * "}") 32 * "}")
33 * 33 *
34 * ANTLR grammar rule 34 * ANTLR grammar rule
35 - * bitStatement : BIT_KEYWORD IDENTIFIER (STMTEND | LEFT_CURLY_BRACE bitBodyStatement RIGHT_CURLY_BRACE); 35 + * bitStatement : BIT_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE bitBodyStatement RIGHT_CURLY_BRACE);
36 * 36 *
37 * bitBodyStatement : positionStatement? statusStatement? descriptionStatement? referenceStatement? 37 * bitBodyStatement : positionStatement? statusStatement? descriptionStatement? referenceStatement?
38 * | positionStatement? statusStatement? referenceStatement? descriptionStatement? 38 * | positionStatement? statusStatement? referenceStatement? descriptionStatement?
...@@ -65,10 +65,12 @@ import org.onosproject.yangutils.datamodel.YangBit; ...@@ -65,10 +65,12 @@ import org.onosproject.yangutils.datamodel.YangBit;
65 import org.onosproject.yangutils.datamodel.YangBits; 65 import org.onosproject.yangutils.datamodel.YangBits;
66 import org.onosproject.yangutils.datamodel.exceptions.DataModelException; 66 import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
67 import org.onosproject.yangutils.parser.Parsable; 67 import org.onosproject.yangutils.parser.Parsable;
68 -import static org.onosproject.yangutils.utils.YangConstructType.BIT_DATA;
69 import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; 68 import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
70 import org.onosproject.yangutils.parser.exceptions.ParserException; 69 import org.onosproject.yangutils.parser.exceptions.ParserException;
71 import org.onosproject.yangutils.parser.impl.TreeWalkListener; 70 import org.onosproject.yangutils.parser.impl.TreeWalkListener;
71 +
72 +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
73 +import static org.onosproject.yangutils.utils.YangConstructType.BIT_DATA;
72 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; 74 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
73 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT; 75 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
74 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage; 76 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
...@@ -102,10 +104,12 @@ public final class BitListener { ...@@ -102,10 +104,12 @@ public final class BitListener {
102 GeneratedYangParser.BitStatementContext ctx) { 104 GeneratedYangParser.BitStatementContext ctx) {
103 105
104 // Check for stack to be non empty. 106 // Check for stack to be non empty.
105 - checkStackIsNotEmpty(listener, MISSING_HOLDER, BIT_DATA, ctx.IDENTIFIER().getText(), ENTRY); 107 + checkStackIsNotEmpty(listener, MISSING_HOLDER, BIT_DATA, ctx.identifier().getText(), ENTRY);
108 +
109 + String identifier = getValidIdentifier(ctx.identifier().getText(), BIT_DATA, ctx);
106 110
107 YangBit bitNode = new YangBit(); 111 YangBit bitNode = new YangBit();
108 - bitNode.setBitName(ctx.IDENTIFIER().getText()); 112 + bitNode.setBitName(identifier);
109 listener.getParsedDataStack().push(bitNode); 113 listener.getParsedDataStack().push(bitNode);
110 } 114 }
111 115
...@@ -120,14 +124,14 @@ public final class BitListener { ...@@ -120,14 +124,14 @@ public final class BitListener {
120 GeneratedYangParser.BitStatementContext ctx) { 124 GeneratedYangParser.BitStatementContext ctx) {
121 125
122 // Check for stack to be non empty. 126 // Check for stack to be non empty.
123 - checkStackIsNotEmpty(listener, MISSING_HOLDER, BIT_DATA, ctx.IDENTIFIER().getText(), EXIT); 127 + checkStackIsNotEmpty(listener, MISSING_HOLDER, BIT_DATA, ctx.identifier().getText(), EXIT);
124 128
125 Parsable tmpBitNode = listener.getParsedDataStack().peek(); 129 Parsable tmpBitNode = listener.getParsedDataStack().peek();
126 if (tmpBitNode instanceof YangBit) { 130 if (tmpBitNode instanceof YangBit) {
127 listener.getParsedDataStack().pop(); 131 listener.getParsedDataStack().pop();
128 132
129 // Check for stack to be non empty. 133 // Check for stack to be non empty.
130 - checkStackIsNotEmpty(listener, MISSING_HOLDER, BIT_DATA, ctx.IDENTIFIER().getText(), EXIT); 134 + checkStackIsNotEmpty(listener, MISSING_HOLDER, BIT_DATA, ctx.identifier().getText(), EXIT);
131 135
132 Parsable tmpNode = listener.getParsedDataStack().peek(); 136 Parsable tmpNode = listener.getParsedDataStack().peek();
133 switch (tmpNode.getYangConstructType()) { 137 switch (tmpNode.getYangConstructType()) {
...@@ -152,20 +156,20 @@ public final class BitListener { ...@@ -152,20 +156,20 @@ public final class BitListener {
152 yangBits.addBitInfo((YangBit) tmpBitNode); 156 yangBits.addBitInfo((YangBit) tmpBitNode);
153 } catch (DataModelException e) { 157 } catch (DataModelException e) {
154 ParserException parserException = new ParserException(constructExtendedListenerErrorMessage( 158 ParserException parserException = new ParserException(constructExtendedListenerErrorMessage(
155 - INVALID_CONTENT, BIT_DATA, ctx.IDENTIFIER().getText(), EXIT, e.getMessage())); 159 + INVALID_CONTENT, BIT_DATA, ctx.identifier().getText(), EXIT, e.getMessage()));
156 - parserException.setLine(ctx.IDENTIFIER().getSymbol().getLine()); 160 + parserException.setLine(ctx.getStart().getLine());
157 - parserException.setCharPosition(ctx.IDENTIFIER().getSymbol().getCharPositionInLine()); 161 + parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
158 throw parserException; 162 throw parserException;
159 } 163 }
160 break; 164 break;
161 } 165 }
162 default: 166 default:
163 throw new ParserException( 167 throw new ParserException(
164 - constructListenerErrorMessage(INVALID_HOLDER, BIT_DATA, ctx.IDENTIFIER().getText(), EXIT)); 168 + constructListenerErrorMessage(INVALID_HOLDER, BIT_DATA, ctx.identifier().getText(), EXIT));
165 } 169 }
166 } else { 170 } else {
167 throw new ParserException( 171 throw new ParserException(
168 - constructListenerErrorMessage(MISSING_CURRENT_HOLDER, BIT_DATA, ctx.IDENTIFIER().getText(), EXIT)); 172 + constructListenerErrorMessage(MISSING_CURRENT_HOLDER, BIT_DATA, ctx.identifier().getText(), EXIT));
169 } 173 }
170 } 174 }
171 } 175 }
......
...@@ -25,6 +25,9 @@ import org.onosproject.yangutils.parser.Parsable; ...@@ -25,6 +25,9 @@ import org.onosproject.yangutils.parser.Parsable;
25 import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; 25 import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
26 import org.onosproject.yangutils.parser.exceptions.ParserException; 26 import org.onosproject.yangutils.parser.exceptions.ParserException;
27 import org.onosproject.yangutils.parser.impl.TreeWalkListener; 27 import org.onosproject.yangutils.parser.impl.TreeWalkListener;
28 +import org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation;
29 +
30 +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
28 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil; 31 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil;
29 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; 32 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
30 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT; 33 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
...@@ -34,7 +37,6 @@ import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorTyp ...@@ -34,7 +37,6 @@ import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorTyp
34 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER; 37 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
35 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER; 38 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
36 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA; 39 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
37 -import org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation;
38 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty; 40 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
39 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.validateCardinality; 41 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.validateCardinality;
40 import static org.onosproject.yangutils.utils.YangConstructType.CONFIG_DATA; 42 import static org.onosproject.yangutils.utils.YangConstructType.CONFIG_DATA;
...@@ -66,7 +68,7 @@ import static org.onosproject.yangutils.utils.YangConstructType.STATUS_DATA; ...@@ -66,7 +68,7 @@ import static org.onosproject.yangutils.utils.YangConstructType.STATUS_DATA;
66 * "}") 68 * "}")
67 * 69 *
68 * ANTLR grammar rule 70 * ANTLR grammar rule
69 - * containerStatement : CONTAINER_KEYWORD IDENTIFIER 71 + * containerStatement : CONTAINER_KEYWORD identifier
70 * (STMTEND | LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | mustStatement | 72 * (STMTEND | LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | mustStatement |
71 * presenceStatement | configStatement | statusStatement | descriptionStatement | 73 * presenceStatement | configStatement | statusStatement | descriptionStatement |
72 * referenceStatement | typedefStatement | groupingStatement 74 * referenceStatement | typedefStatement | groupingStatement
...@@ -96,19 +98,20 @@ public final class ContainerListener { ...@@ -96,19 +98,20 @@ public final class ContainerListener {
96 GeneratedYangParser.ContainerStatementContext ctx) { 98 GeneratedYangParser.ContainerStatementContext ctx) {
97 99
98 // Check for stack to be non empty. 100 // Check for stack to be non empty.
99 - checkStackIsNotEmpty(listener, MISSING_HOLDER, CONTAINER_DATA, ctx.IDENTIFIER().getText(), ENTRY); 101 + checkStackIsNotEmpty(listener, MISSING_HOLDER, CONTAINER_DATA, ctx.identifier().getText(), ENTRY);
102 +
103 + String identifier = getValidIdentifier(ctx.identifier().getText(), CONTAINER_DATA, ctx);
100 104
101 // Validate sub statement cardinality. 105 // Validate sub statement cardinality.
102 validateSubStatementsCardinality(ctx); 106 validateSubStatementsCardinality(ctx);
103 107
104 // Check for identifier collision 108 // Check for identifier collision
105 - int line = ctx.IDENTIFIER().getSymbol().getLine(); 109 + int line = ctx.getStart().getLine();
106 - int charPositionInLine = ctx.IDENTIFIER().getSymbol().getCharPositionInLine(); 110 + int charPositionInLine = ctx.getStart().getCharPositionInLine();
107 - String identifierName = ctx.IDENTIFIER().getText(); 111 + detectCollidingChildUtil(listener, line, charPositionInLine, identifier, CONTAINER_DATA);
108 - detectCollidingChildUtil(listener, line, charPositionInLine, identifierName, CONTAINER_DATA);
109 112
110 YangContainer container = new YangContainer(); 113 YangContainer container = new YangContainer();
111 - container.setName(ctx.IDENTIFIER().getText()); 114 + container.setName(identifier);
112 115
113 /* 116 /*
114 * If "config" is not specified, the default is the same as the parent 117 * If "config" is not specified, the default is the same as the parent
...@@ -127,12 +130,12 @@ public final class ContainerListener { ...@@ -127,12 +130,12 @@ public final class ContainerListener {
127 curNode.addChild(container); 130 curNode.addChild(container);
128 } catch (DataModelException e) { 131 } catch (DataModelException e) {
129 throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA, 132 throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
130 - CONTAINER_DATA, ctx.IDENTIFIER().getText(), ENTRY, e.getMessage())); 133 + CONTAINER_DATA, ctx.identifier().getText(), ENTRY, e.getMessage()));
131 } 134 }
132 listener.getParsedDataStack().push(container); 135 listener.getParsedDataStack().push(container);
133 } else { 136 } else {
134 throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, CONTAINER_DATA, 137 throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, CONTAINER_DATA,
135 - ctx.IDENTIFIER().getText(), ENTRY)); 138 + ctx.identifier().getText(), ENTRY));
136 } 139 }
137 } 140 }
138 141
...@@ -147,7 +150,7 @@ public final class ContainerListener { ...@@ -147,7 +150,7 @@ public final class ContainerListener {
147 GeneratedYangParser.ContainerStatementContext ctx) { 150 GeneratedYangParser.ContainerStatementContext ctx) {
148 151
149 // Check for stack to be non empty. 152 // Check for stack to be non empty.
150 - checkStackIsNotEmpty(listener, MISSING_HOLDER, CONTAINER_DATA, ctx.IDENTIFIER().getText(), EXIT); 153 + checkStackIsNotEmpty(listener, MISSING_HOLDER, CONTAINER_DATA, ctx.identifier().getText(), EXIT);
151 154
152 if (listener.getParsedDataStack().peek() instanceof YangContainer) { 155 if (listener.getParsedDataStack().peek() instanceof YangContainer) {
153 YangContainer yangContainer = (YangContainer) listener.getParsedDataStack().peek(); 156 YangContainer yangContainer = (YangContainer) listener.getParsedDataStack().peek();
...@@ -155,12 +158,12 @@ public final class ContainerListener { ...@@ -155,12 +158,12 @@ public final class ContainerListener {
155 yangContainer.validateDataOnExit(); 158 yangContainer.validateDataOnExit();
156 } catch (DataModelException e) { 159 } catch (DataModelException e) {
157 throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA, 160 throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
158 - CONTAINER_DATA, ctx.IDENTIFIER().getText(), EXIT, e.getMessage())); 161 + CONTAINER_DATA, ctx.identifier().getText(), EXIT, e.getMessage()));
159 } 162 }
160 listener.getParsedDataStack().pop(); 163 listener.getParsedDataStack().pop();
161 } else { 164 } else {
162 throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, CONTAINER_DATA, 165 throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, CONTAINER_DATA,
163 - ctx.IDENTIFIER().getText(), EXIT)); 166 + ctx.identifier().getText(), EXIT));
164 } 167 }
165 } 168 }
166 169
...@@ -171,11 +174,11 @@ public final class ContainerListener { ...@@ -171,11 +174,11 @@ public final class ContainerListener {
171 */ 174 */
172 private static void validateSubStatementsCardinality(GeneratedYangParser.ContainerStatementContext ctx) { 175 private static void validateSubStatementsCardinality(GeneratedYangParser.ContainerStatementContext ctx) {
173 176
174 - validateCardinality(ctx.presenceStatement(), PRESENCE_DATA, CONTAINER_DATA, ctx.IDENTIFIER().getText()); 177 + validateCardinality(ctx.presenceStatement(), PRESENCE_DATA, CONTAINER_DATA, ctx.identifier().getText());
175 - validateCardinality(ctx.configStatement(), CONFIG_DATA, CONTAINER_DATA, ctx.IDENTIFIER().getText()); 178 + validateCardinality(ctx.configStatement(), CONFIG_DATA, CONTAINER_DATA, ctx.identifier().getText());
176 - validateCardinality(ctx.descriptionStatement(), DESCRIPTION_DATA, CONTAINER_DATA, ctx.IDENTIFIER().getText()); 179 + validateCardinality(ctx.descriptionStatement(), DESCRIPTION_DATA, CONTAINER_DATA, ctx.identifier().getText());
177 - validateCardinality(ctx.referenceStatement(), REFERENCE_DATA, CONTAINER_DATA, ctx.IDENTIFIER().getText()); 180 + validateCardinality(ctx.referenceStatement(), REFERENCE_DATA, CONTAINER_DATA, ctx.identifier().getText());
178 - validateCardinality(ctx.statusStatement(), STATUS_DATA, CONTAINER_DATA, ctx.IDENTIFIER().getText()); 181 + validateCardinality(ctx.statusStatement(), STATUS_DATA, CONTAINER_DATA, ctx.identifier().getText());
179 // TODO when, grouping, typedef. 182 // TODO when, grouping, typedef.
180 } 183 }
181 } 184 }
......
...@@ -23,6 +23,8 @@ import org.onosproject.yangutils.parser.Parsable; ...@@ -23,6 +23,8 @@ import org.onosproject.yangutils.parser.Parsable;
23 import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; 23 import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
24 import org.onosproject.yangutils.parser.exceptions.ParserException; 24 import org.onosproject.yangutils.parser.exceptions.ParserException;
25 import org.onosproject.yangutils.parser.impl.TreeWalkListener; 25 import org.onosproject.yangutils.parser.impl.TreeWalkListener;
26 +
27 +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
26 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; 28 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
27 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT; 29 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
28 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage; 30 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
...@@ -49,7 +51,7 @@ import static org.onosproject.yangutils.utils.YangConstructType.IMPORT_DATA; ...@@ -49,7 +51,7 @@ import static org.onosproject.yangutils.utils.YangConstructType.IMPORT_DATA;
49 * ANTLR grammar rule 51 * ANTLR grammar rule
50 * linkage_stmts : (import_stmt 52 * linkage_stmts : (import_stmt
51 * | include_stmt)*; 53 * | include_stmt)*;
52 - * import_stmt : IMPORT_KEYWORD IDENTIFIER LEFT_CURLY_BRACE import_stmt_body 54 + * import_stmt : IMPORT_KEYWORD identifier LEFT_CURLY_BRACE import_stmt_body
53 * RIGHT_CURLY_BRACE; 55 * RIGHT_CURLY_BRACE;
54 * import_stmt_body : prefix_stmt revision_date_stmt?; 56 * import_stmt_body : prefix_stmt revision_date_stmt?;
55 */ 57 */
...@@ -76,10 +78,12 @@ public final class ImportListener { ...@@ -76,10 +78,12 @@ public final class ImportListener {
76 public static void processImportEntry(TreeWalkListener listener, GeneratedYangParser.ImportStatementContext ctx) { 78 public static void processImportEntry(TreeWalkListener listener, GeneratedYangParser.ImportStatementContext ctx) {
77 79
78 // Check for stack to be non empty. 80 // Check for stack to be non empty.
79 - checkStackIsNotEmpty(listener, MISSING_HOLDER, IMPORT_DATA, ctx.IDENTIFIER().getText(), ENTRY); 81 + checkStackIsNotEmpty(listener, MISSING_HOLDER, IMPORT_DATA, ctx.identifier().getText(), ENTRY);
82 +
83 + String identifier = getValidIdentifier(ctx.identifier().getText(), IMPORT_DATA, ctx);
80 84
81 YangImport importNode = new YangImport(); 85 YangImport importNode = new YangImport();
82 - importNode.setModuleName(ctx.IDENTIFIER().getText()); 86 + importNode.setModuleName(identifier);
83 87
84 // Push import node to the stack. 88 // Push import node to the stack.
85 listener.getParsedDataStack().push(importNode); 89 listener.getParsedDataStack().push(importNode);
...@@ -95,14 +99,14 @@ public final class ImportListener { ...@@ -95,14 +99,14 @@ public final class ImportListener {
95 public static void processImportExit(TreeWalkListener listener, GeneratedYangParser.ImportStatementContext ctx) { 99 public static void processImportExit(TreeWalkListener listener, GeneratedYangParser.ImportStatementContext ctx) {
96 100
97 // Check for stack to be non empty. 101 // Check for stack to be non empty.
98 - checkStackIsNotEmpty(listener, MISSING_HOLDER, IMPORT_DATA, ctx.IDENTIFIER().getText(), EXIT); 102 + checkStackIsNotEmpty(listener, MISSING_HOLDER, IMPORT_DATA, ctx.identifier().getText(), EXIT);
99 103
100 Parsable tmpImportNode = listener.getParsedDataStack().peek(); 104 Parsable tmpImportNode = listener.getParsedDataStack().peek();
101 if (tmpImportNode instanceof YangImport) { 105 if (tmpImportNode instanceof YangImport) {
102 listener.getParsedDataStack().pop(); 106 listener.getParsedDataStack().pop();
103 107
104 // Check for stack to be non empty. 108 // Check for stack to be non empty.
105 - checkStackIsNotEmpty(listener, MISSING_HOLDER, IMPORT_DATA, ctx.IDENTIFIER().getText(), 109 + checkStackIsNotEmpty(listener, MISSING_HOLDER, IMPORT_DATA, ctx.identifier().getText(),
106 EXIT); 110 EXIT);
107 111
108 Parsable tmpNode = listener.getParsedDataStack().peek(); 112 Parsable tmpNode = listener.getParsedDataStack().peek();
...@@ -119,12 +123,12 @@ public final class ImportListener { ...@@ -119,12 +123,12 @@ public final class ImportListener {
119 } 123 }
120 default: 124 default:
121 throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, IMPORT_DATA, 125 throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, IMPORT_DATA,
122 - ctx.IDENTIFIER().getText(), 126 + ctx.identifier().getText(),
123 EXIT)); 127 EXIT));
124 } 128 }
125 } else { 129 } else {
126 throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, IMPORT_DATA, 130 throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, IMPORT_DATA,
127 - ctx.IDENTIFIER().getText(), EXIT)); 131 + ctx.identifier().getText(), EXIT));
128 } 132 }
129 } 133 }
130 } 134 }
......
...@@ -23,6 +23,8 @@ import org.onosproject.yangutils.parser.Parsable; ...@@ -23,6 +23,8 @@ import org.onosproject.yangutils.parser.Parsable;
23 import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; 23 import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
24 import org.onosproject.yangutils.parser.exceptions.ParserException; 24 import org.onosproject.yangutils.parser.exceptions.ParserException;
25 import org.onosproject.yangutils.parser.impl.TreeWalkListener; 25 import org.onosproject.yangutils.parser.impl.TreeWalkListener;
26 +
27 +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
26 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; 28 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
27 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT; 29 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
28 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage; 30 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
...@@ -49,7 +51,7 @@ import static org.onosproject.yangutils.utils.YangConstructType.INCLUDE_DATA; ...@@ -49,7 +51,7 @@ import static org.onosproject.yangutils.utils.YangConstructType.INCLUDE_DATA;
49 * ANTLR grammar rule 51 * ANTLR grammar rule
50 * linkage_stmts : (import_stmt 52 * linkage_stmts : (import_stmt
51 * | include_stmt)*; 53 * | include_stmt)*;
52 - * include_stmt : INCLUDE_KEYWORD IDENTIFIER (STMTEND | LEFT_CURLY_BRACE 54 + * include_stmt : INCLUDE_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE
53 * revision_date_stmt? RIGHT_CURLY_BRACE); 55 * revision_date_stmt? RIGHT_CURLY_BRACE);
54 */ 56 */
55 57
...@@ -75,11 +77,13 @@ public final class IncludeListener { ...@@ -75,11 +77,13 @@ public final class IncludeListener {
75 public static void processIncludeEntry(TreeWalkListener listener, GeneratedYangParser.IncludeStatementContext ctx) { 77 public static void processIncludeEntry(TreeWalkListener listener, GeneratedYangParser.IncludeStatementContext ctx) {
76 78
77 // Check for stack to be non empty. 79 // Check for stack to be non empty.
78 - checkStackIsNotEmpty(listener, MISSING_HOLDER, INCLUDE_DATA, ctx.IDENTIFIER().getText(), 80 + checkStackIsNotEmpty(listener, MISSING_HOLDER, INCLUDE_DATA, ctx.identifier().getText(),
79 ENTRY); 81 ENTRY);
80 82
83 + String identifier = getValidIdentifier(ctx.identifier().getText(), INCLUDE_DATA, ctx);
84 +
81 YangInclude includeNode = new YangInclude(); 85 YangInclude includeNode = new YangInclude();
82 - includeNode.setSubModuleName(ctx.IDENTIFIER().getText()); 86 + includeNode.setSubModuleName(identifier);
83 87
84 listener.getParsedDataStack().push(includeNode); 88 listener.getParsedDataStack().push(includeNode);
85 } 89 }
...@@ -94,14 +98,14 @@ public final class IncludeListener { ...@@ -94,14 +98,14 @@ public final class IncludeListener {
94 public static void processIncludeExit(TreeWalkListener listener, GeneratedYangParser.IncludeStatementContext ctx) { 98 public static void processIncludeExit(TreeWalkListener listener, GeneratedYangParser.IncludeStatementContext ctx) {
95 99
96 // Check for stack to be non empty. 100 // Check for stack to be non empty.
97 - checkStackIsNotEmpty(listener, MISSING_HOLDER, INCLUDE_DATA, ctx.IDENTIFIER().getText(), EXIT); 101 + checkStackIsNotEmpty(listener, MISSING_HOLDER, INCLUDE_DATA, ctx.identifier().getText(), EXIT);
98 102
99 Parsable tmpIncludeNode = listener.getParsedDataStack().peek(); 103 Parsable tmpIncludeNode = listener.getParsedDataStack().peek();
100 if (tmpIncludeNode instanceof YangInclude) { 104 if (tmpIncludeNode instanceof YangInclude) {
101 listener.getParsedDataStack().pop(); 105 listener.getParsedDataStack().pop();
102 106
103 // Check for stack to be non empty. 107 // Check for stack to be non empty.
104 - checkStackIsNotEmpty(listener, MISSING_HOLDER, INCLUDE_DATA, ctx.IDENTIFIER().getText(), 108 + checkStackIsNotEmpty(listener, MISSING_HOLDER, INCLUDE_DATA, ctx.identifier().getText(),
105 EXIT); 109 EXIT);
106 110
107 Parsable tmpNode = listener.getParsedDataStack().peek(); 111 Parsable tmpNode = listener.getParsedDataStack().peek();
...@@ -118,12 +122,12 @@ public final class IncludeListener { ...@@ -118,12 +122,12 @@ public final class IncludeListener {
118 } 122 }
119 default: 123 default:
120 throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, INCLUDE_DATA, 124 throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, INCLUDE_DATA,
121 - ctx.IDENTIFIER().getText(), 125 + ctx.identifier().getText(),
122 EXIT)); 126 EXIT));
123 } 127 }
124 } else { 128 } else {
125 throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, INCLUDE_DATA, 129 throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, INCLUDE_DATA,
126 - ctx.IDENTIFIER().getText(), EXIT)); 130 + ctx.identifier().getText(), EXIT));
127 } 131 }
128 } 132 }
129 } 133 }
......
...@@ -22,6 +22,8 @@ import org.onosproject.yangutils.parser.Parsable; ...@@ -22,6 +22,8 @@ import org.onosproject.yangutils.parser.Parsable;
22 import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; 22 import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
23 import org.onosproject.yangutils.parser.exceptions.ParserException; 23 import org.onosproject.yangutils.parser.exceptions.ParserException;
24 import org.onosproject.yangutils.parser.impl.TreeWalkListener; 24 import org.onosproject.yangutils.parser.impl.TreeWalkListener;
25 +
26 +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
25 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil; 27 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil;
26 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; 28 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
27 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT; 29 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
...@@ -64,7 +66,7 @@ import static org.onosproject.yangutils.utils.YangConstructType.UNITS_DATA; ...@@ -64,7 +66,7 @@ import static org.onosproject.yangutils.utils.YangConstructType.UNITS_DATA;
64 * "}" 66 * "}"
65 * 67 *
66 * ANTLR grammar rule 68 * ANTLR grammar rule
67 - * leafListStatement : LEAF_LIST_KEYWORD IDENTIFIER LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | 69 + * leafListStatement : LEAF_LIST_KEYWORD identifier LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement |
68 * typeStatement | unitsStatement | mustStatement | configStatement | minElementsStatement | maxElementsStatement | 70 * typeStatement | unitsStatement | mustStatement | configStatement | minElementsStatement | maxElementsStatement |
69 * orderedByStatement | statusStatement | descriptionStatement | referenceStatement)* RIGHT_CURLY_BRACE; 71 * orderedByStatement | statusStatement | descriptionStatement | referenceStatement)* RIGHT_CURLY_BRACE;
70 */ 72 */
...@@ -92,19 +94,20 @@ public final class LeafListListener { ...@@ -92,19 +94,20 @@ public final class LeafListListener {
92 GeneratedYangParser.LeafListStatementContext ctx) { 94 GeneratedYangParser.LeafListStatementContext ctx) {
93 95
94 // Check for stack to be non empty. 96 // Check for stack to be non empty.
95 - checkStackIsNotEmpty(listener, MISSING_HOLDER, LEAF_LIST_DATA, ctx.IDENTIFIER().getText(), ENTRY); 97 + checkStackIsNotEmpty(listener, MISSING_HOLDER, LEAF_LIST_DATA, ctx.identifier().getText(), ENTRY);
98 +
99 + String identifier = getValidIdentifier(ctx.identifier().getText(), LEAF_LIST_DATA, ctx);
96 100
97 // Validate sub statement cardinality. 101 // Validate sub statement cardinality.
98 validateSubStatementsCardinality(ctx); 102 validateSubStatementsCardinality(ctx);
99 103
100 // Check for identifier collision 104 // Check for identifier collision
101 - int line = ctx.IDENTIFIER().getSymbol().getLine(); 105 + int line = ctx.getStart().getLine();
102 - int charPositionInLine = ctx.IDENTIFIER().getSymbol().getCharPositionInLine(); 106 + int charPositionInLine = ctx.getStart().getCharPositionInLine();
103 - String identifierName = ctx.IDENTIFIER().getText(); 107 + detectCollidingChildUtil(listener, line, charPositionInLine, identifier, LEAF_LIST_DATA);
104 - detectCollidingChildUtil(listener, line, charPositionInLine, identifierName, LEAF_LIST_DATA);
105 108
106 YangLeafList leafList = new YangLeafList(); 109 YangLeafList leafList = new YangLeafList();
107 - leafList.setLeafName(ctx.IDENTIFIER().getText()); 110 + leafList.setLeafName(identifier);
108 111
109 Parsable tmpData = listener.getParsedDataStack().peek(); 112 Parsable tmpData = listener.getParsedDataStack().peek();
110 YangLeavesHolder leaves; 113 YangLeavesHolder leaves;
...@@ -114,7 +117,7 @@ public final class LeafListListener { ...@@ -114,7 +117,7 @@ public final class LeafListListener {
114 leaves.addLeafList(leafList); 117 leaves.addLeafList(leafList);
115 } else { 118 } else {
116 throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LEAF_LIST_DATA, 119 throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LEAF_LIST_DATA,
117 - ctx.IDENTIFIER().getText(), ENTRY)); 120 + ctx.identifier().getText(), ENTRY));
118 } 121 }
119 listener.getParsedDataStack().push(leafList); 122 listener.getParsedDataStack().push(leafList);
120 } 123 }
...@@ -130,31 +133,31 @@ public final class LeafListListener { ...@@ -130,31 +133,31 @@ public final class LeafListListener {
130 GeneratedYangParser.LeafListStatementContext ctx) { 133 GeneratedYangParser.LeafListStatementContext ctx) {
131 134
132 // Check for stack to be non empty. 135 // Check for stack to be non empty.
133 - checkStackIsNotEmpty(listener, MISSING_HOLDER, LEAF_LIST_DATA, ctx.IDENTIFIER().getText(), EXIT); 136 + checkStackIsNotEmpty(listener, MISSING_HOLDER, LEAF_LIST_DATA, ctx.identifier().getText(), EXIT);
134 137
135 if (listener.getParsedDataStack().peek() instanceof YangLeafList) { 138 if (listener.getParsedDataStack().peek() instanceof YangLeafList) {
136 listener.getParsedDataStack().pop(); 139 listener.getParsedDataStack().pop();
137 } else { 140 } else {
138 throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, LEAF_LIST_DATA, 141 throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, LEAF_LIST_DATA,
139 - ctx.IDENTIFIER().getText(), EXIT)); 142 + ctx.identifier().getText(), EXIT));
140 } 143 }
141 } 144 }
142 145
143 /** 146 /**
144 * Validates the cardinality of leaf-list sub-statements as per grammar. 147 * Validates the cardinality of leaf-list sub-statements as per grammar.
145 * 148 *
146 - * @param ctx context object of the grammar rule. 149 + * @param ctx context object of the grammar rule
147 */ 150 */
148 private static void validateSubStatementsCardinality(GeneratedYangParser.LeafListStatementContext ctx) { 151 private static void validateSubStatementsCardinality(GeneratedYangParser.LeafListStatementContext ctx) {
149 152
150 - validateCardinalityEqualsOne(ctx.typeStatement(), TYPE_DATA, LEAF_LIST_DATA, ctx.IDENTIFIER().getText()); 153 + validateCardinalityEqualsOne(ctx.typeStatement(), TYPE_DATA, LEAF_LIST_DATA, ctx.identifier().getText());
151 - validateCardinality(ctx.unitsStatement(), UNITS_DATA, LEAF_LIST_DATA, ctx.IDENTIFIER().getText()); 154 + validateCardinality(ctx.unitsStatement(), UNITS_DATA, LEAF_LIST_DATA, ctx.identifier().getText());
152 - validateCardinality(ctx.configStatement(), CONFIG_DATA, LEAF_LIST_DATA, ctx.IDENTIFIER().getText()); 155 + validateCardinality(ctx.configStatement(), CONFIG_DATA, LEAF_LIST_DATA, ctx.identifier().getText());
153 - validateCardinality(ctx.maxElementsStatement(), MAX_ELEMENT_DATA, LEAF_LIST_DATA, ctx.IDENTIFIER().getText()); 156 + validateCardinality(ctx.maxElementsStatement(), MAX_ELEMENT_DATA, LEAF_LIST_DATA, ctx.identifier().getText());
154 - validateCardinality(ctx.minElementsStatement(), MIN_ELEMENT_DATA, LEAF_LIST_DATA, ctx.IDENTIFIER().getText()); 157 + validateCardinality(ctx.minElementsStatement(), MIN_ELEMENT_DATA, LEAF_LIST_DATA, ctx.identifier().getText());
155 - validateCardinality(ctx.descriptionStatement(), DESCRIPTION_DATA, LEAF_LIST_DATA, ctx.IDENTIFIER().getText()); 158 + validateCardinality(ctx.descriptionStatement(), DESCRIPTION_DATA, LEAF_LIST_DATA, ctx.identifier().getText());
156 - validateCardinality(ctx.referenceStatement(), REFERENCE_DATA, LEAF_LIST_DATA, ctx.IDENTIFIER().getText()); 159 + validateCardinality(ctx.referenceStatement(), REFERENCE_DATA, LEAF_LIST_DATA, ctx.identifier().getText());
157 - validateCardinality(ctx.statusStatement(), STATUS_DATA, LEAF_LIST_DATA, ctx.IDENTIFIER().getText()); 160 + validateCardinality(ctx.statusStatement(), STATUS_DATA, LEAF_LIST_DATA, ctx.identifier().getText());
158 //TODO ordered by 161 //TODO ordered by
159 } 162 }
160 } 163 }
......
...@@ -26,6 +26,8 @@ import org.onosproject.yangutils.parser.Parsable; ...@@ -26,6 +26,8 @@ import org.onosproject.yangutils.parser.Parsable;
26 import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; 26 import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
27 import org.onosproject.yangutils.parser.exceptions.ParserException; 27 import org.onosproject.yangutils.parser.exceptions.ParserException;
28 import org.onosproject.yangutils.parser.impl.TreeWalkListener; 28 import org.onosproject.yangutils.parser.impl.TreeWalkListener;
29 +
30 +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
29 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil; 31 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil;
30 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; 32 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
31 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT; 33 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
...@@ -66,7 +68,7 @@ import static org.onosproject.yangutils.utils.YangConstructType.UNITS_DATA; ...@@ -66,7 +68,7 @@ import static org.onosproject.yangutils.utils.YangConstructType.UNITS_DATA;
66 * "}" 68 * "}"
67 * 69 *
68 * ANTLR grammar rule 70 * ANTLR grammar rule
69 - * leafStatement : LEAF_KEYWORD IDENTIFIER LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | typeStatement | 71 + * leafStatement : LEAF_KEYWORD identifier LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | typeStatement |
70 * unitsStatement | mustStatement | defaultStatement | configStatement | mandatoryStatement | statusStatement | 72 * unitsStatement | mustStatement | defaultStatement | configStatement | mandatoryStatement | statusStatement |
71 * descriptionStatement | referenceStatement)* RIGHT_CURLY_BRACE; 73 * descriptionStatement | referenceStatement)* RIGHT_CURLY_BRACE;
72 */ 74 */
...@@ -94,19 +96,20 @@ public final class LeafListener { ...@@ -94,19 +96,20 @@ public final class LeafListener {
94 GeneratedYangParser.LeafStatementContext ctx) { 96 GeneratedYangParser.LeafStatementContext ctx) {
95 97
96 // Check for stack to be non empty. 98 // Check for stack to be non empty.
97 - checkStackIsNotEmpty(listener, MISSING_HOLDER, LEAF_DATA, ctx.IDENTIFIER().getText(), ENTRY); 99 + checkStackIsNotEmpty(listener, MISSING_HOLDER, LEAF_DATA, ctx.identifier().getText(), ENTRY);
100 +
101 + String identifier = getValidIdentifier(ctx.identifier().getText(), LEAF_DATA, ctx);
98 102
99 // Validate sub statement cardinality. 103 // Validate sub statement cardinality.
100 validateSubStatementsCardinality(ctx); 104 validateSubStatementsCardinality(ctx);
101 105
102 // Check for identifier collision 106 // Check for identifier collision
103 - int line = ctx.IDENTIFIER().getSymbol().getLine(); 107 + int line = ctx.getStart().getLine();
104 - int charPositionInLine = ctx.IDENTIFIER().getSymbol().getCharPositionInLine(); 108 + int charPositionInLine = ctx.getStart().getCharPositionInLine();
105 - String identifierName = ctx.IDENTIFIER().getText(); 109 + detectCollidingChildUtil(listener, line, charPositionInLine, identifier, LEAF_DATA);
106 - detectCollidingChildUtil(listener, line, charPositionInLine, identifierName, LEAF_DATA);
107 110
108 YangLeaf leaf = new YangLeaf(); 111 YangLeaf leaf = new YangLeaf();
109 - leaf.setLeafName(ctx.IDENTIFIER().getText()); 112 + leaf.setLeafName(identifier);
110 113
111 Parsable tmpData = listener.getParsedDataStack().peek(); 114 Parsable tmpData = listener.getParsedDataStack().peek();
112 YangLeavesHolder leaves; 115 YangLeavesHolder leaves;
...@@ -116,7 +119,7 @@ public final class LeafListener { ...@@ -116,7 +119,7 @@ public final class LeafListener {
116 leaves.addLeaf(leaf); 119 leaves.addLeaf(leaf);
117 } else { 120 } else {
118 throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LEAF_DATA, 121 throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LEAF_DATA,
119 - ctx.IDENTIFIER().getText(), ENTRY)); 122 + ctx.identifier().getText(), ENTRY));
120 } 123 }
121 124
122 listener.getParsedDataStack().push(leaf); 125 listener.getParsedDataStack().push(leaf);
...@@ -126,37 +129,37 @@ public final class LeafListener { ...@@ -126,37 +129,37 @@ public final class LeafListener {
126 * It is called when parser exits from grammar rule (leaf), performs 129 * It is called when parser exits from grammar rule (leaf), performs
127 * validation and updates the data model tree. 130 * validation and updates the data model tree.
128 * 131 *
129 - * @param listener listener's object. 132 + * @param listener listener's object
130 - * @param ctx context object of the grammar rule. 133 + * @param ctx context object of the grammar rule
131 */ 134 */
132 public static void processLeafExit(TreeWalkListener listener, 135 public static void processLeafExit(TreeWalkListener listener,
133 GeneratedYangParser.LeafStatementContext ctx) { 136 GeneratedYangParser.LeafStatementContext ctx) {
134 137
135 // Check for stack to be non empty. 138 // Check for stack to be non empty.
136 - checkStackIsNotEmpty(listener, MISSING_HOLDER, LEAF_DATA, ctx.IDENTIFIER().getText(), EXIT); 139 + checkStackIsNotEmpty(listener, MISSING_HOLDER, LEAF_DATA, ctx.identifier().getText(), EXIT);
137 140
138 if (listener.getParsedDataStack().peek() instanceof YangLeaf) { 141 if (listener.getParsedDataStack().peek() instanceof YangLeaf) {
139 listener.getParsedDataStack().pop(); 142 listener.getParsedDataStack().pop();
140 } else { 143 } else {
141 throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, LEAF_DATA, 144 throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, LEAF_DATA,
142 - ctx.IDENTIFIER().getText(), EXIT)); 145 + ctx.identifier().getText(), EXIT));
143 } 146 }
144 } 147 }
145 148
146 /** 149 /**
147 * Validates the cardinality of leaf sub-statements as per grammar. 150 * Validates the cardinality of leaf sub-statements as per grammar.
148 * 151 *
149 - * @param ctx context object of the grammar rule. 152 + * @param ctx context object of the grammar rule
150 */ 153 */
151 private static void validateSubStatementsCardinality(GeneratedYangParser.LeafStatementContext ctx) { 154 private static void validateSubStatementsCardinality(GeneratedYangParser.LeafStatementContext ctx) {
152 155
153 - validateCardinalityEqualsOne(ctx.typeStatement(), TYPE_DATA, LEAF_DATA, ctx.IDENTIFIER().getText()); 156 + validateCardinalityEqualsOne(ctx.typeStatement(), TYPE_DATA, LEAF_DATA, ctx.identifier().getText());
154 - validateCardinality(ctx.unitsStatement(), UNITS_DATA, LEAF_DATA, ctx.IDENTIFIER().getText()); 157 + validateCardinality(ctx.unitsStatement(), UNITS_DATA, LEAF_DATA, ctx.identifier().getText());
155 - validateCardinality(ctx.configStatement(), CONFIG_DATA, LEAF_DATA, ctx.IDENTIFIER().getText()); 158 + validateCardinality(ctx.configStatement(), CONFIG_DATA, LEAF_DATA, ctx.identifier().getText());
156 - validateCardinality(ctx.mandatoryStatement(), MANDATORY_DATA, LEAF_DATA, ctx.IDENTIFIER().getText()); 159 + validateCardinality(ctx.mandatoryStatement(), MANDATORY_DATA, LEAF_DATA, ctx.identifier().getText());
157 - validateCardinality(ctx.descriptionStatement(), DESCRIPTION_DATA, LEAF_DATA, ctx.IDENTIFIER().getText()); 160 + validateCardinality(ctx.descriptionStatement(), DESCRIPTION_DATA, LEAF_DATA, ctx.identifier().getText());
158 - validateCardinality(ctx.referenceStatement(), REFERENCE_DATA, LEAF_DATA, ctx.IDENTIFIER().getText()); 161 + validateCardinality(ctx.referenceStatement(), REFERENCE_DATA, LEAF_DATA, ctx.identifier().getText());
159 - validateCardinality(ctx.statusStatement(), STATUS_DATA, LEAF_DATA, ctx.IDENTIFIER().getText()); 162 + validateCardinality(ctx.statusStatement(), STATUS_DATA, LEAF_DATA, ctx.identifier().getText());
160 //TODO when. 163 //TODO when.
161 } 164 }
162 } 165 }
......
...@@ -27,6 +27,7 @@ import org.onosproject.yangutils.parser.exceptions.ParserException; ...@@ -27,6 +27,7 @@ import org.onosproject.yangutils.parser.exceptions.ParserException;
27 import org.onosproject.yangutils.parser.impl.TreeWalkListener; 27 import org.onosproject.yangutils.parser.impl.TreeWalkListener;
28 import org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation; 28 import org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation;
29 29
30 +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
30 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil; 31 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil;
31 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; 32 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
32 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT; 33 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
...@@ -74,7 +75,7 @@ import static org.onosproject.yangutils.utils.YangConstructType.STATUS_DATA; ...@@ -74,7 +75,7 @@ import static org.onosproject.yangutils.utils.YangConstructType.STATUS_DATA;
74 * "}" 75 * "}"
75 * 76 *
76 * ANTLR grammar rule 77 * ANTLR grammar rule
77 - * listStatement : LIST_KEYWORD IDENTIFIER LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | mustStatement | 78 + * listStatement : LIST_KEYWORD identifier LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | mustStatement |
78 * keyStatement | uniqueStatement | configStatement | minElementsStatement | maxElementsStatement | 79 * keyStatement | uniqueStatement | configStatement | minElementsStatement | maxElementsStatement |
79 * orderedByStatement | statusStatement | descriptionStatement | referenceStatement | typedefStatement | 80 * orderedByStatement | statusStatement | descriptionStatement | referenceStatement | typedefStatement |
80 * groupingStatement| dataDefStatement)* RIGHT_CURLY_BRACE; 81 * groupingStatement| dataDefStatement)* RIGHT_CURLY_BRACE;
...@@ -104,19 +105,20 @@ public final class ListListener { ...@@ -104,19 +105,20 @@ public final class ListListener {
104 105
105 YangNode curNode; 106 YangNode curNode;
106 107
107 - checkStackIsNotEmpty(listener, MISSING_HOLDER, LIST_DATA, ctx.IDENTIFIER().getText(), ENTRY); 108 + checkStackIsNotEmpty(listener, MISSING_HOLDER, LIST_DATA, ctx.identifier().getText(), ENTRY);
109 +
110 + String identifier = getValidIdentifier(ctx.identifier().getText(), LIST_DATA, ctx);
108 111
109 // Validate sub statement cardinality. 112 // Validate sub statement cardinality.
110 validateSubStatementsCardinality(ctx); 113 validateSubStatementsCardinality(ctx);
111 114
112 // Check for identifier collision 115 // Check for identifier collision
113 - int line = ctx.IDENTIFIER().getSymbol().getLine(); 116 + int line = ctx.getStart().getLine();
114 - int charPositionInLine = ctx.IDENTIFIER().getSymbol().getCharPositionInLine(); 117 + int charPositionInLine = ctx.getStart().getCharPositionInLine();
115 - String identifierName = ctx.IDENTIFIER().getText(); 118 + detectCollidingChildUtil(listener, line, charPositionInLine, identifier, LIST_DATA);
116 - detectCollidingChildUtil(listener, line, charPositionInLine, identifierName, LIST_DATA);
117 119
118 YangList yangList = new YangList(); 120 YangList yangList = new YangList();
119 - yangList.setName(ctx.IDENTIFIER().getText()); 121 + yangList.setName(identifier);
120 122
121 /* 123 /*
122 * If "config" is not specified, the default is the same as the parent 124 * If "config" is not specified, the default is the same as the parent
...@@ -135,12 +137,12 @@ public final class ListListener { ...@@ -135,12 +137,12 @@ public final class ListListener {
135 curNode.addChild(yangList); 137 curNode.addChild(yangList);
136 } catch (DataModelException e) { 138 } catch (DataModelException e) {
137 throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA, 139 throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
138 - LIST_DATA, ctx.IDENTIFIER().getText(), ENTRY, e.getMessage())); 140 + LIST_DATA, ctx.identifier().getText(), ENTRY, e.getMessage()));
139 } 141 }
140 listener.getParsedDataStack().push(yangList); 142 listener.getParsedDataStack().push(yangList);
141 } else { 143 } else {
142 throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LIST_DATA, 144 throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LIST_DATA,
143 - ctx.IDENTIFIER().getText(), ENTRY)); 145 + ctx.identifier().getText(), ENTRY));
144 } 146 }
145 } 147 }
146 148
...@@ -154,7 +156,7 @@ public final class ListListener { ...@@ -154,7 +156,7 @@ public final class ListListener {
154 public static void processListExit(TreeWalkListener listener, 156 public static void processListExit(TreeWalkListener listener,
155 GeneratedYangParser.ListStatementContext ctx) { 157 GeneratedYangParser.ListStatementContext ctx) {
156 158
157 - checkStackIsNotEmpty(listener, MISSING_HOLDER, LIST_DATA, ctx.IDENTIFIER().getText(), EXIT); 159 + checkStackIsNotEmpty(listener, MISSING_HOLDER, LIST_DATA, ctx.identifier().getText(), EXIT);
158 160
159 if (listener.getParsedDataStack().peek() instanceof YangList) { 161 if (listener.getParsedDataStack().peek() instanceof YangList) {
160 YangList yangList = (YangList) listener.getParsedDataStack().peek(); 162 YangList yangList = (YangList) listener.getParsedDataStack().peek();
...@@ -162,12 +164,12 @@ public final class ListListener { ...@@ -162,12 +164,12 @@ public final class ListListener {
162 yangList.validateDataOnExit(); 164 yangList.validateDataOnExit();
163 } catch (DataModelException e) { 165 } catch (DataModelException e) {
164 throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA, 166 throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
165 - LIST_DATA, ctx.IDENTIFIER().getText(), EXIT, e.getMessage())); 167 + LIST_DATA, ctx.identifier().getText(), EXIT, e.getMessage()));
166 } 168 }
167 listener.getParsedDataStack().pop(); 169 listener.getParsedDataStack().pop();
168 } else { 170 } else {
169 throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, LIST_DATA, 171 throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, LIST_DATA,
170 - ctx.IDENTIFIER().getText(), EXIT)); 172 + ctx.identifier().getText(), EXIT));
171 } 173 }
172 } 174 }
173 175
...@@ -178,14 +180,14 @@ public final class ListListener { ...@@ -178,14 +180,14 @@ public final class ListListener {
178 */ 180 */
179 private static void validateSubStatementsCardinality(GeneratedYangParser.ListStatementContext ctx) { 181 private static void validateSubStatementsCardinality(GeneratedYangParser.ListStatementContext ctx) {
180 182
181 - validateCardinality(ctx.keyStatement(), KEY_DATA, LIST_DATA, ctx.IDENTIFIER().getText()); 183 + validateCardinality(ctx.keyStatement(), KEY_DATA, LIST_DATA, ctx.identifier().getText());
182 - validateCardinality(ctx.configStatement(), CONFIG_DATA, LIST_DATA, ctx.IDENTIFIER().getText()); 184 + validateCardinality(ctx.configStatement(), CONFIG_DATA, LIST_DATA, ctx.identifier().getText());
183 - validateCardinality(ctx.maxElementsStatement(), MAX_ELEMENT_DATA, LIST_DATA, ctx.IDENTIFIER().getText()); 185 + validateCardinality(ctx.maxElementsStatement(), MAX_ELEMENT_DATA, LIST_DATA, ctx.identifier().getText());
184 - validateCardinality(ctx.minElementsStatement(), MIN_ELEMENT_DATA, LIST_DATA, ctx.IDENTIFIER().getText()); 186 + validateCardinality(ctx.minElementsStatement(), MIN_ELEMENT_DATA, LIST_DATA, ctx.identifier().getText());
185 - validateCardinality(ctx.descriptionStatement(), DESCRIPTION_DATA, LIST_DATA, ctx.IDENTIFIER().getText()); 187 + validateCardinality(ctx.descriptionStatement(), DESCRIPTION_DATA, LIST_DATA, ctx.identifier().getText());
186 - validateCardinality(ctx.referenceStatement(), REFERENCE_DATA, LIST_DATA, ctx.IDENTIFIER().getText()); 188 + validateCardinality(ctx.referenceStatement(), REFERENCE_DATA, LIST_DATA, ctx.identifier().getText());
187 - validateCardinality(ctx.statusStatement(), STATUS_DATA, LIST_DATA, ctx.IDENTIFIER().getText()); 189 + validateCardinality(ctx.statusStatement(), STATUS_DATA, LIST_DATA, ctx.identifier().getText());
188 - validateCardinalityNonNull(ctx.dataDefStatement(), DATA_DEF_DATA, LIST_DATA, ctx.IDENTIFIER().getText()); 190 + validateCardinalityNonNull(ctx.dataDefStatement(), DATA_DEF_DATA, LIST_DATA, ctx.identifier().getText());
189 //TODO when, typedef, grouping, unique 191 //TODO when, typedef, grouping, unique
190 } 192 }
191 } 193 }
......
...@@ -20,6 +20,8 @@ import org.onosproject.yangutils.datamodel.YangModule; ...@@ -20,6 +20,8 @@ import org.onosproject.yangutils.datamodel.YangModule;
20 import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; 20 import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
21 import org.onosproject.yangutils.parser.exceptions.ParserException; 21 import org.onosproject.yangutils.parser.exceptions.ParserException;
22 import org.onosproject.yangutils.parser.impl.TreeWalkListener; 22 import org.onosproject.yangutils.parser.impl.TreeWalkListener;
23 +
24 +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
23 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; 25 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
24 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT; 26 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
25 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage; 27 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
...@@ -45,7 +47,7 @@ import static org.onosproject.yangutils.utils.YangConstructType.MODULE_DATA; ...@@ -45,7 +47,7 @@ import static org.onosproject.yangutils.utils.YangConstructType.MODULE_DATA;
45 * "}" optsep 47 * "}" optsep
46 * 48 *
47 * ANTLR grammar rule 49 * ANTLR grammar rule
48 - * module_stmt : MODULE_KEYWORD IDENTIFIER LEFT_CURLY_BRACE module_body* RIGHT_CURLY_BRACE; 50 + * module_stmt : MODULE_KEYWORD identifier LEFT_CURLY_BRACE module_body* RIGHT_CURLY_BRACE;
49 */ 51 */
50 52
51 /** 53 /**
...@@ -70,10 +72,12 @@ public final class ModuleListener { ...@@ -70,10 +72,12 @@ public final class ModuleListener {
70 public static void processModuleEntry(TreeWalkListener listener, GeneratedYangParser.ModuleStatementContext ctx) { 72 public static void processModuleEntry(TreeWalkListener listener, GeneratedYangParser.ModuleStatementContext ctx) {
71 73
72 // Check if stack is empty. 74 // Check if stack is empty.
73 - checkStackIsEmpty(listener, INVALID_HOLDER, MODULE_DATA, ctx.IDENTIFIER().getText(), ENTRY); 75 + checkStackIsEmpty(listener, INVALID_HOLDER, MODULE_DATA, ctx.identifier().getText(), ENTRY);
76 +
77 + String identifier = getValidIdentifier(ctx.identifier().getText(), MODULE_DATA, ctx);
74 78
75 YangModule yangModule = new YangModule(); 79 YangModule yangModule = new YangModule();
76 - yangModule.setName(ctx.IDENTIFIER().getText()); 80 + yangModule.setName(identifier);
77 81
78 if (ctx.moduleBody(0).moduleHeaderStatement().yangVersionStatement() == null) { 82 if (ctx.moduleBody(0).moduleHeaderStatement().yangVersionStatement() == null) {
79 yangModule.setVersion((byte) 1); 83 yangModule.setVersion((byte) 1);
...@@ -92,11 +96,11 @@ public final class ModuleListener { ...@@ -92,11 +96,11 @@ public final class ModuleListener {
92 public static void processModuleExit(TreeWalkListener listener, GeneratedYangParser.ModuleStatementContext ctx) { 96 public static void processModuleExit(TreeWalkListener listener, GeneratedYangParser.ModuleStatementContext ctx) {
93 97
94 // Check for stack to be non empty. 98 // Check for stack to be non empty.
95 - checkStackIsNotEmpty(listener, MISSING_HOLDER, MODULE_DATA, ctx.IDENTIFIER().getText(), EXIT); 99 + checkStackIsNotEmpty(listener, MISSING_HOLDER, MODULE_DATA, ctx.identifier().getText(), EXIT);
96 100
97 if (!(listener.getParsedDataStack().peek() instanceof YangModule)) { 101 if (!(listener.getParsedDataStack().peek() instanceof YangModule)) {
98 throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, MODULE_DATA, 102 throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, MODULE_DATA,
99 - ctx.IDENTIFIER().getText(), EXIT)); 103 + ctx.identifier().getText(), EXIT));
100 } 104 }
101 } 105 }
102 } 106 }
......
...@@ -30,7 +30,7 @@ package org.onosproject.yangutils.parser.impl.listeners; ...@@ -30,7 +30,7 @@ package org.onosproject.yangutils.parser.impl.listeners;
30 * zero-integer-value = 1*DIGIT 30 * zero-integer-value = 1*DIGIT
31 * 31 *
32 * ANTLR grammar rule 32 * ANTLR grammar rule
33 - * positionStatement : POSITION_KEYWORD INTEGER STMTEND; 33 + * positionStatement : POSITION_KEYWORD string STMTEND;
34 */ 34 */
35 35
36 import org.onosproject.yangutils.datamodel.YangBit; 36 import org.onosproject.yangutils.datamodel.YangBit;
...@@ -44,6 +44,7 @@ import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLoc ...@@ -44,6 +44,7 @@ import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLoc
44 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage; 44 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
45 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER; 45 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
46 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER; 46 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
47 +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat;
47 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty; 48 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
48 import static org.onosproject.yangutils.utils.YangConstructType.POSITION_DATA; 49 import static org.onosproject.yangutils.utils.YangConstructType.POSITION_DATA;
49 50
...@@ -73,25 +74,27 @@ public final class PositionListener { ...@@ -73,25 +74,27 @@ public final class PositionListener {
73 GeneratedYangParser.PositionStatementContext ctx) { 74 GeneratedYangParser.PositionStatementContext ctx) {
74 75
75 // Check for stack to be non empty. 76 // Check for stack to be non empty.
76 - checkStackIsNotEmpty(listener, MISSING_HOLDER, POSITION_DATA, ctx.INTEGER().getText(), ENTRY); 77 + checkStackIsNotEmpty(listener, MISSING_HOLDER, POSITION_DATA, ctx.string().getText(), ENTRY);
78 +
79 + String position = removeQuotesAndHandleConcat(ctx.string().getText());
77 80
78 // Obtain the node of the stack. 81 // Obtain the node of the stack.
79 Parsable tmpNode = listener.getParsedDataStack().peek(); 82 Parsable tmpNode = listener.getParsedDataStack().peek();
80 switch (tmpNode.getYangConstructType()) { 83 switch (tmpNode.getYangConstructType()) {
81 case BIT_DATA: { 84 case BIT_DATA: {
82 YangBit bitNode = (YangBit) tmpNode; 85 YangBit bitNode = (YangBit) tmpNode;
83 - if (!isBitPositionValid(listener, ctx)) { 86 + if (!isBitPositionValid(listener, ctx, position)) {
84 ParserException parserException = new ParserException(errMsg); 87 ParserException parserException = new ParserException(errMsg);
85 - parserException.setLine(ctx.INTEGER().getSymbol().getLine()); 88 + parserException.setLine(ctx.getStart().getLine());
86 - parserException.setCharPosition(ctx.INTEGER().getSymbol().getCharPositionInLine()); 89 + parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
87 throw parserException; 90 throw parserException;
88 } 91 }
89 - bitNode.setPosition(Integer.valueOf(ctx.INTEGER().getText())); 92 + bitNode.setPosition(Integer.valueOf(position));
90 break; 93 break;
91 } 94 }
92 default: 95 default:
93 throw new ParserException( 96 throw new ParserException(
94 - constructListenerErrorMessage(INVALID_HOLDER, POSITION_DATA, ctx.INTEGER().getText(), ENTRY)); 97 + constructListenerErrorMessage(INVALID_HOLDER, POSITION_DATA, ctx.string().getText(), ENTRY));
95 } 98 }
96 } 99 }
97 100
...@@ -103,13 +106,13 @@ public final class PositionListener { ...@@ -103,13 +106,13 @@ public final class PositionListener {
103 * @return validation result 106 * @return validation result
104 */ 107 */
105 private static boolean isBitPositionValid(TreeWalkListener listener, 108 private static boolean isBitPositionValid(TreeWalkListener listener,
106 - GeneratedYangParser.PositionStatementContext ctx) { 109 + GeneratedYangParser.PositionStatementContext ctx, String position) {
107 Parsable bitNode = listener.getParsedDataStack().pop(); 110 Parsable bitNode = listener.getParsedDataStack().pop();
108 111
109 // Check for stack to be non empty. 112 // Check for stack to be non empty.
110 - checkStackIsNotEmpty(listener, MISSING_HOLDER, POSITION_DATA, ctx.INTEGER().getText(), ENTRY); 113 + checkStackIsNotEmpty(listener, MISSING_HOLDER, POSITION_DATA, ctx.string().getText(), ENTRY);
111 114
112 - if (Integer.valueOf(ctx.INTEGER().getText()) < 0) { 115 + if (Integer.valueOf(position) < 0) {
113 errMsg = "YANG file error: Negative value of position is invalid."; 116 errMsg = "YANG file error: Negative value of position is invalid.";
114 listener.getParsedDataStack().push(bitNode); 117 listener.getParsedDataStack().push(bitNode);
115 return false; 118 return false;
...@@ -120,7 +123,7 @@ public final class PositionListener { ...@@ -120,7 +123,7 @@ public final class PositionListener {
120 case BITS_DATA: { 123 case BITS_DATA: {
121 YangBits yangBits = (YangBits) tmpNode; 124 YangBits yangBits = (YangBits) tmpNode;
122 for (YangBit curBit : yangBits.getBitSet()) { 125 for (YangBit curBit : yangBits.getBitSet()) {
123 - if (Integer.valueOf(ctx.INTEGER().getText()) == curBit.getPosition()) { 126 + if (Integer.valueOf(position) == curBit.getPosition()) {
124 errMsg = "YANG file error: Duplicate value of position is invalid."; 127 errMsg = "YANG file error: Duplicate value of position is invalid.";
125 listener.getParsedDataStack().push(bitNode); 128 listener.getParsedDataStack().push(bitNode);
126 return false; 129 return false;
...@@ -132,7 +135,7 @@ public final class PositionListener { ...@@ -132,7 +135,7 @@ public final class PositionListener {
132 default: 135 default:
133 listener.getParsedDataStack().push(bitNode); 136 listener.getParsedDataStack().push(bitNode);
134 throw new ParserException( 137 throw new ParserException(
135 - constructListenerErrorMessage(INVALID_HOLDER, POSITION_DATA, ctx.INTEGER().getText(), ENTRY)); 138 + constructListenerErrorMessage(INVALID_HOLDER, POSITION_DATA, ctx.string().getText(), ENTRY));
136 } 139 }
137 } 140 }
138 } 141 }
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -24,6 +24,7 @@ import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; ...@@ -24,6 +24,7 @@ import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
24 import org.onosproject.yangutils.parser.exceptions.ParserException; 24 import org.onosproject.yangutils.parser.exceptions.ParserException;
25 import org.onosproject.yangutils.parser.impl.TreeWalkListener; 25 import org.onosproject.yangutils.parser.impl.TreeWalkListener;
26 26
27 +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
27 import static org.onosproject.yangutils.utils.YangConstructType.PREFIX_DATA; 28 import static org.onosproject.yangutils.utils.YangConstructType.PREFIX_DATA;
28 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; 29 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
29 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage; 30 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
...@@ -51,7 +52,7 @@ import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidati ...@@ -51,7 +52,7 @@ import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidati
51 * | prefix_stmt namespace_stmt yang_version_stmt? 52 * | prefix_stmt namespace_stmt yang_version_stmt?
52 * | prefix_stmt yang_version_stmt? namespace_stmt 53 * | prefix_stmt yang_version_stmt? namespace_stmt
53 * ; 54 * ;
54 - * prefix_stmt : PREFIX_KEYWORD IDENTIFIER STMTEND; 55 + * prefix_stmt : PREFIX_KEYWORD identifier STMTEND;
55 */ 56 */
56 57
57 /** 58 /**
...@@ -76,29 +77,31 @@ public final class PrefixListener { ...@@ -76,29 +77,31 @@ public final class PrefixListener {
76 public static void processPrefixEntry(TreeWalkListener listener, GeneratedYangParser.PrefixStatementContext ctx) { 77 public static void processPrefixEntry(TreeWalkListener listener, GeneratedYangParser.PrefixStatementContext ctx) {
77 78
78 // Check for stack to be non empty. 79 // Check for stack to be non empty.
79 - checkStackIsNotEmpty(listener, MISSING_HOLDER, PREFIX_DATA, ctx.IDENTIFIER().getText(), ENTRY); 80 + checkStackIsNotEmpty(listener, MISSING_HOLDER, PREFIX_DATA, ctx.identifier().getText(), ENTRY);
81 +
82 + String identifier = getValidIdentifier(ctx.identifier().getText(), PREFIX_DATA, ctx);
80 83
81 // Obtain the node of the stack. 84 // Obtain the node of the stack.
82 Parsable tmpNode = listener.getParsedDataStack().peek(); 85 Parsable tmpNode = listener.getParsedDataStack().peek();
83 switch (tmpNode.getYangConstructType()) { 86 switch (tmpNode.getYangConstructType()) {
84 case MODULE_DATA: { 87 case MODULE_DATA: {
85 YangModule module = (YangModule) tmpNode; 88 YangModule module = (YangModule) tmpNode;
86 - module.setPrefix(ctx.IDENTIFIER().getText()); 89 + module.setPrefix(identifier);
87 break; 90 break;
88 } 91 }
89 case IMPORT_DATA: { 92 case IMPORT_DATA: {
90 YangImport importNode = (YangImport) tmpNode; 93 YangImport importNode = (YangImport) tmpNode;
91 - importNode.setPrefixId(ctx.IDENTIFIER().getText()); 94 + importNode.setPrefixId(identifier);
92 break; 95 break;
93 } 96 }
94 case BELONGS_TO_DATA: { 97 case BELONGS_TO_DATA: {
95 YangBelongsTo belongstoNode = (YangBelongsTo) tmpNode; 98 YangBelongsTo belongstoNode = (YangBelongsTo) tmpNode;
96 - belongstoNode.setPrefix(ctx.IDENTIFIER().getText()); 99 + belongstoNode.setPrefix(identifier);
97 break; 100 break;
98 } 101 }
99 default: 102 default:
100 throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, PREFIX_DATA, 103 throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, PREFIX_DATA,
101 - ctx.IDENTIFIER().getText(), ENTRY)); 104 + ctx.identifier().getText(), ENTRY));
102 } 105 }
103 } 106 }
104 } 107 }
......
...@@ -16,10 +16,6 @@ ...@@ -16,10 +16,6 @@
16 16
17 package org.onosproject.yangutils.parser.impl.listeners; 17 package org.onosproject.yangutils.parser.impl.listeners;
18 18
19 -import java.text.ParseException;
20 -import java.text.SimpleDateFormat;
21 -import java.util.Date;
22 -
23 import org.onosproject.yangutils.datamodel.YangImport; 19 import org.onosproject.yangutils.datamodel.YangImport;
24 import org.onosproject.yangutils.datamodel.YangInclude; 20 import org.onosproject.yangutils.datamodel.YangInclude;
25 import org.onosproject.yangutils.parser.Parsable; 21 import org.onosproject.yangutils.parser.Parsable;
...@@ -27,6 +23,8 @@ import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; ...@@ -27,6 +23,8 @@ import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
27 import org.onosproject.yangutils.parser.exceptions.ParserException; 23 import org.onosproject.yangutils.parser.exceptions.ParserException;
28 import org.onosproject.yangutils.parser.impl.TreeWalkListener; 24 import org.onosproject.yangutils.parser.impl.TreeWalkListener;
29 25
26 +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat;
27 +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.isDateValid;
30 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; 28 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
31 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage; 29 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
32 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER; 30 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
...@@ -86,13 +84,14 @@ public final class RevisionDateListener { ...@@ -86,13 +84,14 @@ public final class RevisionDateListener {
86 GeneratedYangParser.RevisionDateStatementContext ctx) { 84 GeneratedYangParser.RevisionDateStatementContext ctx) {
87 85
88 // Check for stack to be non empty. 86 // Check for stack to be non empty.
89 - checkStackIsNotEmpty(listener, MISSING_HOLDER, REVISION_DATE_DATA, ctx.DATE_ARG().getText(), 87 + checkStackIsNotEmpty(listener, MISSING_HOLDER, REVISION_DATE_DATA, ctx.dateArgumentString().getText(),
90 ENTRY); 88 ENTRY);
91 89
92 - if (!isDateValid(ctx.DATE_ARG().getText())) { 90 + String date = removeQuotesAndHandleConcat(ctx.dateArgumentString().getText());
91 + if (!isDateValid(date)) {
93 ParserException parserException = new ParserException("YANG file error: Input date is not correct"); 92 ParserException parserException = new ParserException("YANG file error: Input date is not correct");
94 - parserException.setLine(ctx.DATE_ARG().getSymbol().getLine()); 93 + parserException.setLine(ctx.getStart().getLine());
95 - parserException.setCharPosition(ctx.DATE_ARG().getSymbol().getCharPositionInLine()); 94 + parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
96 throw parserException; 95 throw parserException;
97 } 96 }
98 97
...@@ -101,42 +100,17 @@ public final class RevisionDateListener { ...@@ -101,42 +100,17 @@ public final class RevisionDateListener {
101 switch (tmpNode.getYangConstructType()) { 100 switch (tmpNode.getYangConstructType()) {
102 case IMPORT_DATA: { 101 case IMPORT_DATA: {
103 YangImport importNode = (YangImport) tmpNode; 102 YangImport importNode = (YangImport) tmpNode;
104 - importNode.setRevision(ctx.DATE_ARG().getText()); 103 + importNode.setRevision(date);
105 break; 104 break;
106 } 105 }
107 case INCLUDE_DATA: { 106 case INCLUDE_DATA: {
108 YangInclude includeNode = (YangInclude) tmpNode; 107 YangInclude includeNode = (YangInclude) tmpNode;
109 - includeNode.setRevision(ctx.DATE_ARG().getText()); 108 + includeNode.setRevision(date);
110 break; 109 break;
111 } 110 }
112 default: 111 default:
113 throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, REVISION_DATE_DATA, 112 throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, REVISION_DATE_DATA,
114 - ctx.DATE_ARG().getText(), ENTRY)); 113 + ctx.dateArgumentString().getText(), ENTRY));
115 - }
116 - }
117 -
118 - /**
119 - * Validates the revision date.
120 - *
121 - * @param dateToValidate input revision date
122 - * @return validation result, true for success, false for failure
123 - */
124 - private static boolean isDateValid(String dateToValidate) {
125 -
126 - if (dateToValidate == null) {
127 - return false;
128 - }
129 -
130 - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
131 - sdf.setLenient(false);
132 -
133 - try {
134 - //if not valid, it will throw ParseException
135 - Date date = sdf.parse(dateToValidate);
136 - System.out.println(date);
137 - } catch (ParseException e) {
138 - return false;
139 } 114 }
140 - return true;
141 } 115 }
142 } 116 }
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -24,6 +24,8 @@ import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; ...@@ -24,6 +24,8 @@ import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
24 import org.onosproject.yangutils.parser.exceptions.ParserException; 24 import org.onosproject.yangutils.parser.exceptions.ParserException;
25 import org.onosproject.yangutils.parser.impl.TreeWalkListener; 25 import org.onosproject.yangutils.parser.impl.TreeWalkListener;
26 26
27 +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat;
28 +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.isDateValid;
27 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER; 29 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
28 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER; 30 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
29 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER; 31 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
...@@ -33,10 +35,6 @@ import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLoc ...@@ -33,10 +35,6 @@ import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLoc
33 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage; 35 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
34 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty; 36 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
35 37
36 -import java.text.ParseException;
37 -import java.text.SimpleDateFormat;
38 -import java.util.Date;
39 -
40 /* 38 /*
41 * Reference: RFC6020 and YANG ANTLR Grammar 39 * Reference: RFC6020 and YANG ANTLR Grammar
42 * 40 *
...@@ -88,7 +86,7 @@ public final class RevisionListener { ...@@ -88,7 +86,7 @@ public final class RevisionListener {
88 GeneratedYangParser.RevisionStatementContext ctx) { 86 GeneratedYangParser.RevisionStatementContext ctx) {
89 87
90 // Check for stack to be non empty. 88 // Check for stack to be non empty.
91 - checkStackIsNotEmpty(listener, MISSING_HOLDER, REVISION_DATA, ctx.DATE_ARG().getText(), ENTRY); 89 + checkStackIsNotEmpty(listener, MISSING_HOLDER, REVISION_DATA, ctx.dateArgumentString().getText(), ENTRY);
92 90
93 // Validate for reverse chronological order of revision & for revision 91 // Validate for reverse chronological order of revision & for revision
94 // value. 92 // value.
...@@ -97,15 +95,16 @@ public final class RevisionListener { ...@@ -97,15 +95,16 @@ public final class RevisionListener {
97 // TODO to be implemented. 95 // TODO to be implemented.
98 } 96 }
99 97
100 - if (!isDateValid(ctx.DATE_ARG().getText())) { 98 + String date = removeQuotesAndHandleConcat(ctx.dateArgumentString().getText());
99 + if (!isDateValid(date)) {
101 ParserException parserException = new ParserException("YANG file error: Input date is not correct"); 100 ParserException parserException = new ParserException("YANG file error: Input date is not correct");
102 - parserException.setLine(ctx.DATE_ARG().getSymbol().getLine()); 101 + parserException.setLine(ctx.getStart().getLine());
103 - parserException.setCharPosition(ctx.DATE_ARG().getSymbol().getCharPositionInLine()); 102 + parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
104 throw parserException; 103 throw parserException;
105 } 104 }
106 105
107 YangRevision revisionNode = new YangRevision(); 106 YangRevision revisionNode = new YangRevision();
108 - revisionNode.setRevDate(ctx.DATE_ARG().getText()); 107 + revisionNode.setRevDate(date);
109 108
110 listener.getParsedDataStack().push(revisionNode); 109 listener.getParsedDataStack().push(revisionNode);
111 } 110 }
...@@ -121,14 +120,14 @@ public final class RevisionListener { ...@@ -121,14 +120,14 @@ public final class RevisionListener {
121 ctx) { 120 ctx) {
122 121
123 // Check for stack to be non empty. 122 // Check for stack to be non empty.
124 - checkStackIsNotEmpty(listener, MISSING_HOLDER, REVISION_DATA, ctx.DATE_ARG().getText(), EXIT); 123 + checkStackIsNotEmpty(listener, MISSING_HOLDER, REVISION_DATA, ctx.dateArgumentString().getText(), EXIT);
125 124
126 Parsable tmpRevisionNode = listener.getParsedDataStack().peek(); 125 Parsable tmpRevisionNode = listener.getParsedDataStack().peek();
127 if (tmpRevisionNode instanceof YangRevision) { 126 if (tmpRevisionNode instanceof YangRevision) {
128 listener.getParsedDataStack().pop(); 127 listener.getParsedDataStack().pop();
129 128
130 // Check for stack to be non empty. 129 // Check for stack to be non empty.
131 - checkStackIsNotEmpty(listener, MISSING_HOLDER, REVISION_DATA, ctx.DATE_ARG().getText(), 130 + checkStackIsNotEmpty(listener, MISSING_HOLDER, REVISION_DATA, ctx.dateArgumentString().getText(),
132 EXIT); 131 EXIT);
133 132
134 Parsable tmpNode = listener.getParsedDataStack().peek(); 133 Parsable tmpNode = listener.getParsedDataStack().peek();
...@@ -145,12 +144,12 @@ public final class RevisionListener { ...@@ -145,12 +144,12 @@ public final class RevisionListener {
145 } 144 }
146 default: 145 default:
147 throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, REVISION_DATA, 146 throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, REVISION_DATA,
148 - ctx.DATE_ARG().getText(), 147 + ctx.dateArgumentString().getText(),
149 EXIT)); 148 EXIT));
150 } 149 }
151 } else { 150 } else {
152 throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, REVISION_DATA, 151 throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, REVISION_DATA,
153 - ctx.DATE_ARG().getText(), EXIT)); 152 + ctx.dateArgumentString().getText(), EXIT));
154 } 153 }
155 } 154 }
156 155
...@@ -166,29 +165,4 @@ public final class RevisionListener { ...@@ -166,29 +165,4 @@ public final class RevisionListener {
166 // TODO to be implemented 165 // TODO to be implemented
167 return true; 166 return true;
168 } 167 }
169 -
170 - /**
171 - * Validates the revision date.
172 - *
173 - * @param dateToValidate input revision date
174 - * @return validation result, true for success, false for failure
175 - */
176 - private static boolean isDateValid(String dateToValidate) {
177 -
178 - if (dateToValidate == null) {
179 - return false;
180 - }
181 -
182 - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
183 - sdf.setLenient(false);
184 -
185 - try {
186 - //if not valid, it will throw ParseException
187 - Date date = sdf.parse(dateToValidate);
188 - System.out.println(date);
189 - } catch (ParseException e) {
190 - return false;
191 - }
192 - return true;
193 - }
194 } 168 }
......
...@@ -20,6 +20,8 @@ import org.onosproject.yangutils.datamodel.YangSubModule; ...@@ -20,6 +20,8 @@ import org.onosproject.yangutils.datamodel.YangSubModule;
20 import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; 20 import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
21 import org.onosproject.yangutils.parser.exceptions.ParserException; 21 import org.onosproject.yangutils.parser.exceptions.ParserException;
22 import org.onosproject.yangutils.parser.impl.TreeWalkListener; 22 import org.onosproject.yangutils.parser.impl.TreeWalkListener;
23 +
24 +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
23 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; 25 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
24 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT; 26 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
25 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage; 27 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
...@@ -45,7 +47,7 @@ import static org.onosproject.yangutils.utils.YangConstructType.SUB_MODULE_DATA; ...@@ -45,7 +47,7 @@ import static org.onosproject.yangutils.utils.YangConstructType.SUB_MODULE_DATA;
45 * "}" optsep 47 * "}" optsep
46 * 48 *
47 * ANTLR grammar rule 49 * ANTLR grammar rule
48 - * submodule_stmt : SUBMODULE_KEYWORD IDENTIFIER LEFT_CURLY_BRACE submodule_body* RIGHT_CURLY_BRACE; 50 + * submodule_stmt : SUBMODULE_KEYWORD identifier LEFT_CURLY_BRACE submodule_body* RIGHT_CURLY_BRACE;
49 * submodule_body : submodule_header_statement linkage_stmts meta_stmts revision_stmts body_stmts; 51 * submodule_body : submodule_header_statement linkage_stmts meta_stmts revision_stmts body_stmts;
50 */ 52 */
51 53
...@@ -72,11 +74,13 @@ public final class SubModuleListener { ...@@ -72,11 +74,13 @@ public final class SubModuleListener {
72 GeneratedYangParser.SubModuleStatementContext ctx) { 74 GeneratedYangParser.SubModuleStatementContext ctx) {
73 75
74 // Check if stack is empty. 76 // Check if stack is empty.
75 - checkStackIsEmpty(listener, INVALID_HOLDER, SUB_MODULE_DATA, ctx.IDENTIFIER().getText(), 77 + checkStackIsEmpty(listener, INVALID_HOLDER, SUB_MODULE_DATA, ctx.identifier().getText(),
76 ENTRY); 78 ENTRY);
77 79
80 + String identifier = getValidIdentifier(ctx.identifier().getText(), SUB_MODULE_DATA, ctx);
81 +
78 YangSubModule yangSubModule = new YangSubModule(); 82 YangSubModule yangSubModule = new YangSubModule();
79 - yangSubModule.setName(ctx.IDENTIFIER().getText()); 83 + yangSubModule.setName(identifier);
80 84
81 if (ctx.submoduleBody(0).submoduleHeaderStatement().yangVersionStatement() == null) { 85 if (ctx.submoduleBody(0).submoduleHeaderStatement().yangVersionStatement() == null) {
82 yangSubModule.setVersion((byte) 1); 86 yangSubModule.setVersion((byte) 1);
...@@ -96,12 +100,12 @@ public final class SubModuleListener { ...@@ -96,12 +100,12 @@ public final class SubModuleListener {
96 GeneratedYangParser.SubModuleStatementContext ctx) { 100 GeneratedYangParser.SubModuleStatementContext ctx) {
97 101
98 // Check for stack to be non empty. 102 // Check for stack to be non empty.
99 - checkStackIsNotEmpty(listener, MISSING_HOLDER, SUB_MODULE_DATA, ctx.IDENTIFIER().getText(), 103 + checkStackIsNotEmpty(listener, MISSING_HOLDER, SUB_MODULE_DATA, ctx.identifier().getText(),
100 EXIT); 104 EXIT);
101 105
102 if (!(listener.getParsedDataStack().peek() instanceof YangSubModule)) { 106 if (!(listener.getParsedDataStack().peek() instanceof YangSubModule)) {
103 throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, SUB_MODULE_DATA, 107 throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, SUB_MODULE_DATA,
104 - ctx.IDENTIFIER().getText(), EXIT)); 108 + ctx.identifier().getText(), EXIT));
105 } 109 }
106 } 110 }
107 } 111 }
......
...@@ -42,7 +42,7 @@ package org.onosproject.yangutils.parser.impl.listeners; ...@@ -42,7 +42,7 @@ package org.onosproject.yangutils.parser.impl.listeners;
42 * "}" 42 * "}"
43 * 43 *
44 * ANTLR grammar rule 44 * ANTLR grammar rule
45 - * typedefStatement : TYPEDEF_KEYWORD IDENTIFIER LEFT_CURLY_BRACE 45 + * typedefStatement : TYPEDEF_KEYWORD identifier LEFT_CURLY_BRACE
46 * (typeStatement | unitsStatement | defaultStatement | statusStatement 46 * (typeStatement | unitsStatement | defaultStatement | statusStatement
47 * | descriptionStatement | referenceStatement)* RIGHT_CURLY_BRACE; 47 * | descriptionStatement | referenceStatement)* RIGHT_CURLY_BRACE;
48 */ 48 */
...@@ -62,6 +62,7 @@ import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; ...@@ -62,6 +62,7 @@ import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
62 import org.onosproject.yangutils.parser.exceptions.ParserException; 62 import org.onosproject.yangutils.parser.exceptions.ParserException;
63 import org.onosproject.yangutils.parser.impl.TreeWalkListener; 63 import org.onosproject.yangutils.parser.impl.TreeWalkListener;
64 64
65 +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
65 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; 66 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
66 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT; 67 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
67 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage; 68 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
...@@ -105,7 +106,9 @@ public final class TypeDefListener { ...@@ -105,7 +106,9 @@ public final class TypeDefListener {
105 GeneratedYangParser.TypedefStatementContext ctx) { 106 GeneratedYangParser.TypedefStatementContext ctx) {
106 107
107 // Check for stack to be non empty. 108 // Check for stack to be non empty.
108 - checkStackIsNotEmpty(listener, MISSING_HOLDER, TYPEDEF_DATA, ctx.IDENTIFIER().getText(), ENTRY); 109 + checkStackIsNotEmpty(listener, MISSING_HOLDER, TYPEDEF_DATA, ctx.identifier().getText(), ENTRY);
110 +
111 + String identifier = getValidIdentifier(ctx.identifier().getText(), TYPEDEF_DATA, ctx);
109 112
110 // Validate sub statement cardinality. 113 // Validate sub statement cardinality.
111 validateSubStatementsCardinality(ctx); 114 validateSubStatementsCardinality(ctx);
...@@ -116,7 +119,7 @@ public final class TypeDefListener { ...@@ -116,7 +119,7 @@ public final class TypeDefListener {
116 */ 119 */
117 YangType<YangDerivedType> derivedType = new YangType<YangDerivedType>(); 120 YangType<YangDerivedType> derivedType = new YangType<YangDerivedType>();
118 derivedType.setDataType(YangDataTypes.DERIVED); 121 derivedType.setDataType(YangDataTypes.DERIVED);
119 - derivedType.setDataTypeName(ctx.IDENTIFIER().getText()); 122 + derivedType.setDataTypeName(identifier);
120 123
121 YangTypeDef typeDefNode = new YangTypeDef(); 124 YangTypeDef typeDefNode = new YangTypeDef();
122 typeDefNode.setDerivedType(derivedType); 125 typeDefNode.setDerivedType(derivedType);
...@@ -133,12 +136,12 @@ public final class TypeDefListener { ...@@ -133,12 +136,12 @@ public final class TypeDefListener {
133 curNode.addChild(typeDefNode); 136 curNode.addChild(typeDefNode);
134 } catch (DataModelException e) { 137 } catch (DataModelException e) {
135 throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA, 138 throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
136 - TYPEDEF_DATA, ctx.IDENTIFIER().getText(), ENTRY, e.getMessage())); 139 + TYPEDEF_DATA, ctx.identifier().getText(), ENTRY, e.getMessage()));
137 } 140 }
138 listener.getParsedDataStack().push(typeDefNode); 141 listener.getParsedDataStack().push(typeDefNode);
139 } else { 142 } else {
140 throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, 143 throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER,
141 - TYPEDEF_DATA, ctx.IDENTIFIER().getText(), ENTRY)); 144 + TYPEDEF_DATA, ctx.identifier().getText(), ENTRY));
142 } 145 }
143 } 146 }
144 147
...@@ -153,7 +156,7 @@ public final class TypeDefListener { ...@@ -153,7 +156,7 @@ public final class TypeDefListener {
153 GeneratedYangParser.TypedefStatementContext ctx) { 156 GeneratedYangParser.TypedefStatementContext ctx) {
154 157
155 // Check for stack to be non empty. 158 // Check for stack to be non empty.
156 - checkStackIsNotEmpty(listener, MISSING_HOLDER, TYPEDEF_DATA, ctx.IDENTIFIER().getText(), EXIT); 159 + checkStackIsNotEmpty(listener, MISSING_HOLDER, TYPEDEF_DATA, ctx.identifier().getText(), EXIT);
157 160
158 if (listener.getParsedDataStack().peek() instanceof YangTypeDef) { 161 if (listener.getParsedDataStack().peek() instanceof YangTypeDef) {
159 YangTypeDef typeDefNode = (YangTypeDef) listener.getParsedDataStack().peek(); 162 YangTypeDef typeDefNode = (YangTypeDef) listener.getParsedDataStack().peek();
...@@ -161,13 +164,13 @@ public final class TypeDefListener { ...@@ -161,13 +164,13 @@ public final class TypeDefListener {
161 typeDefNode.validateDataOnExit(); 164 typeDefNode.validateDataOnExit();
162 } catch (DataModelException e) { 165 } catch (DataModelException e) {
163 throw new ParserException(constructListenerErrorMessage(INVALID_CONTENT, TYPEDEF_DATA, 166 throw new ParserException(constructListenerErrorMessage(INVALID_CONTENT, TYPEDEF_DATA,
164 - ctx.IDENTIFIER().getText(), EXIT)); 167 + ctx.identifier().getText(), EXIT));
165 } 168 }
166 169
167 listener.getParsedDataStack().pop(); 170 listener.getParsedDataStack().pop();
168 } else { 171 } else {
169 throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, TYPEDEF_DATA, 172 throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, TYPEDEF_DATA,
170 - ctx.IDENTIFIER().getText(), EXIT)); 173 + ctx.identifier().getText(), EXIT));
171 } 174 }
172 } 175 }
173 176
...@@ -178,11 +181,11 @@ public final class TypeDefListener { ...@@ -178,11 +181,11 @@ public final class TypeDefListener {
178 */ 181 */
179 private static void validateSubStatementsCardinality(GeneratedYangParser.TypedefStatementContext ctx) { 182 private static void validateSubStatementsCardinality(GeneratedYangParser.TypedefStatementContext ctx) {
180 183
181 - validateCardinality(ctx.unitsStatement(), UNITS_DATA, TYPEDEF_DATA, ctx.IDENTIFIER().getText()); 184 + validateCardinality(ctx.unitsStatement(), UNITS_DATA, TYPEDEF_DATA, ctx.identifier().getText());
182 - validateCardinality(ctx.defaultStatement(), DEFAULT_DATA, TYPEDEF_DATA, ctx.IDENTIFIER().getText()); 185 + validateCardinality(ctx.defaultStatement(), DEFAULT_DATA, TYPEDEF_DATA, ctx.identifier().getText());
183 - validateCardinalityEqualsOne(ctx.typeStatement(), TYPE_DATA, TYPEDEF_DATA, ctx.IDENTIFIER().getText()); 186 + validateCardinalityEqualsOne(ctx.typeStatement(), TYPE_DATA, TYPEDEF_DATA, ctx.identifier().getText());
184 - validateCardinality(ctx.descriptionStatement(), DESCRIPTION_DATA, TYPEDEF_DATA, ctx.IDENTIFIER().getText()); 187 + validateCardinality(ctx.descriptionStatement(), DESCRIPTION_DATA, TYPEDEF_DATA, ctx.identifier().getText());
185 - validateCardinality(ctx.referenceStatement(), REFERENCE_DATA, TYPEDEF_DATA, ctx.IDENTIFIER().getText()); 188 + validateCardinality(ctx.referenceStatement(), REFERENCE_DATA, TYPEDEF_DATA, ctx.identifier().getText());
186 - validateCardinality(ctx.statusStatement(), STATUS_DATA, TYPEDEF_DATA, ctx.IDENTIFIER().getText()); 189 + validateCardinality(ctx.statusStatement(), STATUS_DATA, TYPEDEF_DATA, ctx.identifier().getText());
187 } 190 }
188 } 191 }
......
...@@ -23,6 +23,7 @@ import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; ...@@ -23,6 +23,7 @@ import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
23 import org.onosproject.yangutils.parser.exceptions.ParserException; 23 import org.onosproject.yangutils.parser.exceptions.ParserException;
24 import org.onosproject.yangutils.parser.impl.TreeWalkListener; 24 import org.onosproject.yangutils.parser.impl.TreeWalkListener;
25 25
26 +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat;
26 import static org.onosproject.yangutils.utils.YangConstructType.VERSION_DATA; 27 import static org.onosproject.yangutils.utils.YangConstructType.VERSION_DATA;
27 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; 28 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
28 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage; 29 import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
...@@ -59,7 +60,7 @@ import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidati ...@@ -59,7 +60,7 @@ import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidati
59 * submodule_header_statement : yang_version_stmt? belongs_to_stmt 60 * submodule_header_statement : yang_version_stmt? belongs_to_stmt
60 * | belongs_to_stmt yang_version_stmt? 61 * | belongs_to_stmt yang_version_stmt?
61 * ; 62 * ;
62 - * yang_version_stmt : YANG_VERSION_KEYWORD INTEGER STMTEND; 63 + * yang_version_stmt : YANG_VERSION_KEYWORD string STMTEND;
63 */ 64 */
64 65
65 /** 66 /**
...@@ -85,13 +86,13 @@ public final class VersionListener { ...@@ -85,13 +86,13 @@ public final class VersionListener {
85 GeneratedYangParser.YangVersionStatementContext ctx) { 86 GeneratedYangParser.YangVersionStatementContext ctx) {
86 87
87 // Check for stack to be non empty. 88 // Check for stack to be non empty.
88 - checkStackIsNotEmpty(listener, MISSING_HOLDER, VERSION_DATA, ctx.INTEGER().getText(), ENTRY); 89 + checkStackIsNotEmpty(listener, MISSING_HOLDER, VERSION_DATA, ctx.string().getText(), ENTRY);
89 90
90 - Integer version = Integer.valueOf(ctx.INTEGER().getText()); 91 + String version = removeQuotesAndHandleConcat(ctx.string().getText());
91 - if (!isVersionValid(version)) { 92 + if (!isVersionValid(Integer.valueOf(version))) {
92 ParserException parserException = new ParserException("YANG file error: Input version not supported"); 93 ParserException parserException = new ParserException("YANG file error: Input version not supported");
93 - parserException.setLine(ctx.INTEGER().getSymbol().getLine()); 94 + parserException.setLine(ctx.getStart().getLine());
94 - parserException.setCharPosition(ctx.INTEGER().getSymbol().getCharPositionInLine()); 95 + parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
95 throw parserException; 96 throw parserException;
96 } 97 }
97 98
...@@ -110,7 +111,7 @@ public final class VersionListener { ...@@ -110,7 +111,7 @@ public final class VersionListener {
110 } 111 }
111 default: 112 default:
112 throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, VERSION_DATA, 113 throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, VERSION_DATA,
113 - ctx.INTEGER().getText(), ENTRY)); 114 + ctx.string().getText(), ENTRY));
114 } 115 }
115 } 116 }
116 117
......
1 +/*
2 + * Copyright 2016 Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +
17 +package org.onosproject.yangutils.parser.impl.parserutils;
18 +
19 +import org.antlr.v4.runtime.ParserRuleContext;
20 +
21 +import java.text.ParseException;
22 +import java.text.SimpleDateFormat;
23 +import java.util.regex.Pattern;
24 +import org.onosproject.yangutils.utils.YangConstructType;
25 +import org.onosproject.yangutils.parser.exceptions.ParserException;
26 +
27 +/**
28 + * It's a utility for listener.
29 + */
30 +public final class ListenerUtil {
31 + private static final Pattern IDENTIFIER_PATTERN = Pattern.compile("[a-zA-Z_][a-zA-Z0-9_.-]*");
32 + private static final String PLUS = "+";
33 + private static final int IDENTIFIER_LENGTH = 64;
34 +
35 + /**
36 + * Creates a new listener util.
37 + */
38 + private ListenerUtil() {
39 + }
40 +
41 + /**
42 + * Removes doubles quotes and concatenates if string has plus symbol.
43 + *
44 + * @param yangStringData string from yang file
45 + * @return concatenated string after removing double quotes
46 + */
47 + public static String removeQuotesAndHandleConcat(String yangStringData) {
48 +
49 + yangStringData = yangStringData.replace("\"", "");
50 + String[] tmpData = yangStringData.split(Pattern.quote(PLUS));
51 + StringBuilder builder = new StringBuilder();
52 + for (String yangString : tmpData) {
53 + builder.append(yangString);
54 + }
55 + return builder.toString();
56 + }
57 +
58 + /**
59 + * Validates identifier and returns concatenated string if string contains plus symbol.
60 + *
61 + * @param identifier string from yang file
62 + * @param yangConstruct yang construct for creating error message
63 + * @param ctx yang construct's context to get the line number and character position
64 + * @return concatenated string after removing double quotes
65 + */
66 + public static String getValidIdentifier(String identifier, YangConstructType yangConstruct, ParserRuleContext ctx) {
67 +
68 + String identifierString = removeQuotesAndHandleConcat(identifier);
69 + ParserException parserException;
70 +
71 + if (identifierString.length() > IDENTIFIER_LENGTH) {
72 + parserException = new ParserException("YANG file error : " +
73 + YangConstructType.getYangConstructType(yangConstruct) + " name " + identifierString + " is " +
74 + "greater than 64 characters.");
75 + } else if (!IDENTIFIER_PATTERN.matcher(identifierString).matches()) {
76 + parserException = new ParserException("YANG file error : " +
77 + YangConstructType.getYangConstructType(yangConstruct) + " name " + identifierString + " is not " +
78 + "valid.");
79 + } else {
80 + return identifierString;
81 + }
82 +
83 + parserException.setLine(ctx.getStart().getLine());
84 + parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
85 + throw parserException;
86 + }
87 +
88 + /**
89 + * Validates the revision date.
90 + *
91 + * @param dateToValidate input revision date
92 + * @return validation result, true for success, false for failure
93 + */
94 + public static boolean isDateValid(String dateToValidate) {
95 +
96 + if (dateToValidate == null || !dateToValidate.matches("[0-9]{4}-[0-9]{2}-[0-9]{2}")) {
97 + return false;
98 + }
99 +
100 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
101 + sdf.setLenient(false);
102 +
103 + try {
104 + //if not valid, it will throw ParseException
105 + sdf.parse(dateToValidate);
106 + } catch (ParseException e) {
107 + return false;
108 + }
109 +
110 + return true;
111 + }
112 +}
...\ No newline at end of file ...\ No newline at end of file
...@@ -226,7 +226,7 @@ public class ContainerListenerTest { ...@@ -226,7 +226,7 @@ public class ContainerListenerTest {
226 @Test 226 @Test
227 public void processContainerInvalidIdentifier() throws IOException, ParserException { 227 public void processContainerInvalidIdentifier() throws IOException, ParserException {
228 thrown.expect(ParserException.class); 228 thrown.expect(ParserException.class);
229 - thrown.expectMessage("mismatched input '1valid' expecting IDENTIFIER"); 229 + thrown.expectMessage("YANG file error : container name 1valid is not valid.");
230 YangNode node = manager.getDataModel("src/test/resources/ContainerInvalidIdentifier.yang"); 230 YangNode node = manager.getDataModel("src/test/resources/ContainerInvalidIdentifier.yang");
231 } 231 }
232 } 232 }
......
...@@ -85,7 +85,7 @@ public class LeafListListenerTest { ...@@ -85,7 +85,7 @@ public class LeafListListenerTest {
85 @Test 85 @Test
86 public void processLeafListInvalidIdentifier() throws IOException, ParserException { 86 public void processLeafListInvalidIdentifier() throws IOException, ParserException {
87 thrown.expect(ParserException.class); 87 thrown.expect(ParserException.class);
88 - thrown.expectMessage("mismatched input '1invalid-interval' expecting IDENTIFIER"); 88 + thrown.expectMessage("YANG file error : leaf-list name 1invalid-interval is not valid.");
89 YangNode node = manager.getDataModel("src/test/resources/LeafListInvalidIdentifier.yang"); 89 YangNode node = manager.getDataModel("src/test/resources/LeafListInvalidIdentifier.yang");
90 } 90 }
91 91
......
...@@ -85,7 +85,7 @@ public class LeafListenerTest { ...@@ -85,7 +85,7 @@ public class LeafListenerTest {
85 @Test 85 @Test
86 public void processLeafInvalidIdentifier() throws IOException, ParserException { 86 public void processLeafInvalidIdentifier() throws IOException, ParserException {
87 thrown.expect(ParserException.class); 87 thrown.expect(ParserException.class);
88 - thrown.expectMessage("mismatched input '1invalid-interval' expecting IDENTIFIER"); 88 + thrown.expectMessage("YANG file error : leaf name 1invalid-interval is not valid.");
89 YangNode node = manager.getDataModel("src/test/resources/LeafInvalidIdentifier.yang"); 89 YangNode node = manager.getDataModel("src/test/resources/LeafInvalidIdentifier.yang");
90 } 90 }
91 91
......
...@@ -205,7 +205,7 @@ public class ListListenerTest { ...@@ -205,7 +205,7 @@ public class ListListenerTest {
205 @Test 205 @Test
206 public void processListInvalidIdentifier() throws IOException, ParserException { 206 public void processListInvalidIdentifier() throws IOException, ParserException {
207 thrown.expect(ParserException.class); 207 thrown.expect(ParserException.class);
208 - thrown.expectMessage("mismatched input '1valid' expecting IDENTIFIER"); 208 + thrown.expectMessage("YANG file error : list name 1valid is not valid.");
209 YangNode node = manager.getDataModel("src/test/resources/ListInvalidIdentifier.yang"); 209 YangNode node = manager.getDataModel("src/test/resources/ListInvalidIdentifier.yang");
210 } 210 }
211 } 211 }
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -16,7 +16,9 @@ ...@@ -16,7 +16,9 @@
16 16
17 package org.onosproject.yangutils.parser.impl.listeners; 17 package org.onosproject.yangutils.parser.impl.listeners;
18 18
19 +import org.junit.Rule;
19 import org.junit.Test; 20 import org.junit.Test;
21 +import org.junit.rules.ExpectedException;
20 import org.onosproject.yangutils.datamodel.YangModule; 22 import org.onosproject.yangutils.datamodel.YangModule;
21 import org.onosproject.yangutils.datamodel.YangNode; 23 import org.onosproject.yangutils.datamodel.YangNode;
22 import org.onosproject.yangutils.datamodel.YangNodeType; 24 import org.onosproject.yangutils.datamodel.YangNodeType;
...@@ -35,6 +37,9 @@ public class ModuleListenerTest { ...@@ -35,6 +37,9 @@ public class ModuleListenerTest {
35 37
36 private final YangUtilsParserManager manager = new YangUtilsParserManager(); 38 private final YangUtilsParserManager manager = new YangUtilsParserManager();
37 39
40 + @Rule
41 + public ExpectedException thrown = ExpectedException.none();
42 +
38 /** 43 /**
39 * Checks if module listener updates the data model root node. 44 * Checks if module listener updates the data model root node.
40 */ 45 */
...@@ -62,4 +67,15 @@ public class ModuleListenerTest { ...@@ -62,4 +67,15 @@ public class ModuleListenerTest {
62 67
63 YangNode node = manager.getDataModel("src/test/resources/ModuleWithInvalidIdentifier.yang"); 68 YangNode node = manager.getDataModel("src/test/resources/ModuleWithInvalidIdentifier.yang");
64 } 69 }
70 +
71 + /**
72 + * Checks whether exception is thrown when module length is greater than 64 characters.
73 + */
74 + @Test
75 + public void processModuleInvalidIdentifierLength() throws IOException, ParserException {
76 + thrown.expect(ParserException.class);
77 + thrown.expectMessage("YANG file error : module name Testttttttttttttttttttttttttttttttttttttttttttttttttttt" +
78 + "tttttttttt is greater than 64 characters.");
79 + YangNode node = manager.getDataModel("src/test/resources/ModuleInvalidIdentifierLength.yang");
80 + }
65 } 81 }
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -80,6 +80,45 @@ public class PositionListenerTest { ...@@ -80,6 +80,45 @@ public class PositionListenerTest {
80 } 80 }
81 81
82 /** 82 /**
83 + * Checks position value with double quotes.
84 + */
85 + @Test
86 + public void processPositionWithDoubleQuotes() throws IOException, ParserException {
87 +
88 + YangNode node = manager.getDataModel("src/test/resources/PositionWithDoubleQuotes.yang");
89 +
90 + // Check whether the data model tree returned is of type module.
91 + assertThat((node instanceof YangModule), is(true));
92 +
93 + // Check whether the node type is set properly to module.
94 + assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
95 +
96 + // Check whether the module name is set correctly.
97 + YangModule yangNode = (YangModule) node;
98 + assertThat(yangNode.getName(), is("Test"));
99 +
100 + ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
101 + YangLeaf leafInfo = leafIterator.next();
102 +
103 + assertThat(leafInfo.getLeafName(), is("mybits"));
104 + assertThat(leafInfo.getDataType().getDataTypeName(), is("bits"));
105 + assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.BITS));
106 + assertThat(((YangBits) leafInfo.getDataType().getDataTypeExtendedInfo()).getBitsName(),
107 + is("mybits"));
108 +
109 + Set<YangBit> bitSet = ((YangBits) leafInfo.getDataType().getDataTypeExtendedInfo()).getBitSet();
110 + for (YangBit tmp : bitSet) {
111 + if (tmp.getBitName().equals("disable-nagle")) {
112 + assertThat(tmp.getPosition(), is(0));
113 + } else if (tmp.getBitName().equals("auto-sense-speed")) {
114 + assertThat(tmp.getPosition(), is(1));
115 + } else if (tmp.getBitName().equals("Ten-Mb-only")) {
116 + assertThat(tmp.getPosition(), is(2));
117 + }
118 + }
119 + }
120 +
121 + /**
83 * Checks explicit value and auto generated value. 122 * Checks explicit value and auto generated value.
84 */ 123 */
85 @Test 124 @Test
......
...@@ -56,6 +56,16 @@ public class PrefixListenerTest { ...@@ -56,6 +56,16 @@ public class PrefixListenerTest {
56 } 56 }
57 57
58 /** 58 /**
59 + * Checks prefix value with double quotes.
60 + */
61 + @Test
62 + public void processPrefixWithDoubleQuotes() throws IOException, ParserException {
63 +
64 + YangNode node = manager.getDataModel("src/test/resources/PrefixWithDoubleQuotes.yang");
65 + assertThat(((YangModule) node).getPrefix(), is("On"));
66 + }
67 +
68 + /**
59 * Checks that prefix should be present just once. 69 * Checks that prefix should be present just once.
60 */ 70 */
61 @Test(expected = ParserException.class) 71 @Test(expected = ParserException.class)
......
...@@ -53,21 +53,29 @@ public class RevisionDateListenerTest { ...@@ -53,21 +53,29 @@ public class RevisionDateListenerTest {
53 } 53 }
54 54
55 /** 55 /**
56 - * Checks revision date should not be in quotes inside include. 56 + * Checks revision date in quotes inside include.
57 */ 57 */
58 - @Test(expected = ParserException.class) 58 + @Test
59 public void processRevisionDateInQuotesAtInclude() throws IOException, ParserException { 59 public void processRevisionDateInQuotesAtInclude() throws IOException, ParserException {
60 60
61 YangNode node = manager.getDataModel("src/test/resources/RevisionDateInQuotesAtInclude.yang"); 61 YangNode node = manager.getDataModel("src/test/resources/RevisionDateInQuotesAtInclude.yang");
62 + // Checks for the version value in data model tree.
63 + assertThat(((YangModule) node).getImportList().get(0).getRevision(), is("2015-02-03"));
64 + assertThat(((YangModule) node).getIncludeList().get(0).getRevision(), is("2016-02-03"));
65 + assertThat(((YangModule) node).getIncludeList().get(1).getRevision(), is("2014-02-03"));
62 } 66 }
63 67
64 /** 68 /**
65 - * Checks revision date should not be in quotes inside import. 69 + * Checks revision date in quotes inside import.
66 */ 70 */
67 - @Test(expected = ParserException.class) 71 + @Test
68 public void processRevisionDateInQuotesAtImport() throws IOException, ParserException { 72 public void processRevisionDateInQuotesAtImport() throws IOException, ParserException {
69 73
70 YangNode node = manager.getDataModel("src/test/resources/RevisionDateInQuotesAtImport.yang"); 74 YangNode node = manager.getDataModel("src/test/resources/RevisionDateInQuotesAtImport.yang");
75 + // Checks for the version value in data model tree.
76 + assertThat(((YangModule) node).getImportList().get(0).getRevision(), is("2015-02-03"));
77 + assertThat(((YangModule) node).getIncludeList().get(0).getRevision(), is("2016-02-03"));
78 + assertThat(((YangModule) node).getIncludeList().get(1).getRevision(), is("2014-02-03"));
71 } 79 }
72 80
73 /** 81 /**
......
...@@ -56,6 +56,18 @@ public class VersionListenerTest { ...@@ -56,6 +56,18 @@ public class VersionListenerTest {
56 } 56 }
57 57
58 /** 58 /**
59 + * Checks version in double quotes.
60 + */
61 + @Test
62 + public void processValidVersionWithDoubleQuotes() throws IOException, ParserException {
63 +
64 + YangNode node = manager.getDataModel("src/test/resources/ValidVersionWithDoubleQuotes.yang");
65 +
66 + // Checks for the version value in data model tree.
67 + assertThat(((YangModule) node).getVersion(), is((byte) 1));
68 + }
69 +
70 + /**
59 * Checks if version which is optional paramater is not present. 71 * Checks if version which is optional paramater is not present.
60 */ 72 */
61 @Test 73 @Test
......
1 +module Testttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt {
2 +yang-version 1;
3 +namespace urn:ietf:params:xml:ns:yang:ietf-ospf;
4 +prefix On;
5 +}
1 +module Test {
2 + yang-version 1;
3 + namespace http://huawei.com;
4 + prefix Ant;
5 + leaf mybits {
6 + type bits {
7 + bit disable-nagle {
8 + position "0";
9 + }
10 + bit auto-sense-speed {
11 + position "1";
12 + }
13 + bit Ten-Mb-only {
14 + position "2";
15 + }
16 + }
17 + }
18 +}
1 +module Test {
2 +yang-version 1;
3 +namespace urn:ietf:params:xml:ns:yang:ietf-ospf;
4 +prefix "On";
5 +import ietf {
6 +prefix On2;
7 +revision-date 2015-02-03;
8 +}
9 +include itut {
10 +revision-date 2016-02-03;
11 +}
12 +include sdn {
13 +revision-date 2014-02-03;
14 +}
15 +contact "Test";
16 +organization "ONOS";
17 +}
1 +module Test {
2 +yang-version "1";
3 +namespace urn:ietf:params:xml:ns:yang:ietf-ospf;
4 +prefix On;
5 +}