Committed by
Gerrit Code Review
YANG sub module linking + unsupported yang construct + defect fix
Change-Id: I224c8c14ee2111f6844278cb540c48651544f59b
Showing
55 changed files
with
1914 additions
and
613 deletions
... | @@ -57,6 +57,11 @@ public class YangBelongsTo implements Parsable { | ... | @@ -57,6 +57,11 @@ public class YangBelongsTo implements Parsable { |
57 | private String belongsToModuleName; | 57 | private String belongsToModuleName; |
58 | 58 | ||
59 | /** | 59 | /** |
60 | + * Module node to which sub-module belongs to. | ||
61 | + */ | ||
62 | + private YangNode moduleNode; | ||
63 | + | ||
64 | + /** | ||
60 | * Reference RFC 6020. | 65 | * Reference RFC 6020. |
61 | * | 66 | * |
62 | * The mandatory "prefix" substatement assigns a prefix for the module to | 67 | * The mandatory "prefix" substatement assigns a prefix for the module to |
... | @@ -110,6 +115,24 @@ public class YangBelongsTo implements Parsable { | ... | @@ -110,6 +115,24 @@ public class YangBelongsTo implements Parsable { |
110 | } | 115 | } |
111 | 116 | ||
112 | /** | 117 | /** |
118 | + * Returns the module data model node. | ||
119 | + * | ||
120 | + * @return the module data model node | ||
121 | + */ | ||
122 | + public YangNode getModuleNode() { | ||
123 | + return moduleNode; | ||
124 | + } | ||
125 | + | ||
126 | + /** | ||
127 | + * Sets the module node. | ||
128 | + * | ||
129 | + * @param moduleNode module data model node | ||
130 | + */ | ||
131 | + public void setModuleNode(YangNode moduleNode) { | ||
132 | + this.moduleNode = moduleNode; | ||
133 | + } | ||
134 | + | ||
135 | + /** | ||
113 | * Returns the type of the data as belongs-to. | 136 | * Returns the type of the data as belongs-to. |
114 | * | 137 | * |
115 | * @return ParsedDataType returns BELONGS_TO_DATA | 138 | * @return ParsedDataType returns BELONGS_TO_DATA | ... | ... |
... | @@ -135,6 +135,12 @@ public class YangChoice extends YangNode | ... | @@ -135,6 +135,12 @@ public class YangChoice extends YangNode |
135 | private YangStatusType status; | 135 | private YangStatusType status; |
136 | 136 | ||
137 | /** | 137 | /** |
138 | + * Default value in string, needs to be converted to the target object, | ||
139 | + * based on the type. | ||
140 | + */ | ||
141 | + private String defaultValueInString; | ||
142 | + | ||
143 | + /** | ||
138 | * Create a choice node. | 144 | * Create a choice node. |
139 | */ | 145 | */ |
140 | public YangChoice() { | 146 | public YangChoice() { |
... | @@ -276,6 +282,24 @@ public class YangChoice extends YangNode | ... | @@ -276,6 +282,24 @@ public class YangChoice extends YangNode |
276 | } | 282 | } |
277 | 283 | ||
278 | /** | 284 | /** |
285 | + * Returns the default value. | ||
286 | + * | ||
287 | + * @return the default value | ||
288 | + */ | ||
289 | + public String getDefaultValueInString() { | ||
290 | + return defaultValueInString; | ||
291 | + } | ||
292 | + | ||
293 | + /** | ||
294 | + * Sets the default value. | ||
295 | + * | ||
296 | + * @param defaultValueInString the default value | ||
297 | + */ | ||
298 | + public void setDefaultValueInString(String defaultValueInString) { | ||
299 | + this.defaultValueInString = defaultValueInString; | ||
300 | + } | ||
301 | + | ||
302 | + /** | ||
279 | * Returns the type of the data. | 303 | * Returns the type of the data. |
280 | * | 304 | * |
281 | * @return choice data | 305 | * @return choice data | ... | ... |
... | @@ -101,6 +101,12 @@ public class YangLeaf | ... | @@ -101,6 +101,12 @@ public class YangLeaf |
101 | private YangType<?> dataType; | 101 | private YangType<?> dataType; |
102 | 102 | ||
103 | /** | 103 | /** |
104 | + * Default value in string, needs to be converted to the target object, | ||
105 | + * based on the type. | ||
106 | + */ | ||
107 | + private String defaultValueInString; | ||
108 | + | ||
109 | + /** | ||
104 | * Creates a YANG leaf. | 110 | * Creates a YANG leaf. |
105 | */ | 111 | */ |
106 | public YangLeaf() { | 112 | public YangLeaf() { |
... | @@ -239,6 +245,24 @@ public class YangLeaf | ... | @@ -239,6 +245,24 @@ public class YangLeaf |
239 | } | 245 | } |
240 | 246 | ||
241 | /** | 247 | /** |
248 | + * Returns the default value. | ||
249 | + * | ||
250 | + * @return the default value | ||
251 | + */ | ||
252 | + public String getDefaultValueInString() { | ||
253 | + return defaultValueInString; | ||
254 | + } | ||
255 | + | ||
256 | + /** | ||
257 | + * Sets the default value. | ||
258 | + * | ||
259 | + * @param defaultValueInString the default value | ||
260 | + */ | ||
261 | + public void setDefaultValueInString(String defaultValueInString) { | ||
262 | + this.defaultValueInString = defaultValueInString; | ||
263 | + } | ||
264 | + | ||
265 | + /** | ||
242 | * Returns the data type. | 266 | * Returns the data type. |
243 | * | 267 | * |
244 | * @return the data type | 268 | * @return the data type | ... | ... |
... | @@ -445,16 +445,10 @@ public class YangList extends YangNode | ... | @@ -445,16 +445,10 @@ public class YangList extends YangNode |
445 | 445 | ||
446 | /* A list must have atleast one key leaf if config is true */ | 446 | /* A list must have atleast one key leaf if config is true */ |
447 | if (isConfig | 447 | if (isConfig |
448 | - && (keys == null || leaves == null && leafLists == null)) { | 448 | + && (keys == null || leaves == null && leafLists == null && !isUsesPresentInList())) { |
449 | throw new DataModelException("A list must have atleast one key leaf if config is true;"); | 449 | throw new DataModelException("A list must have atleast one key leaf if config is true;"); |
450 | } else if (keys != null) { | 450 | } else if (keys != null) { |
451 | - if (leaves != null) { | 451 | + validateKey(leaves, leafLists, keys); |
452 | - validateLeafKey(leaves, keys); | ||
453 | - } | ||
454 | - | ||
455 | - if (leafLists != null) { | ||
456 | - validateLeafListKey(leafLists, keys); | ||
457 | - } | ||
458 | } | 452 | } |
459 | } | 453 | } |
460 | 454 | ||
... | @@ -528,18 +522,22 @@ public class YangList extends YangNode | ... | @@ -528,18 +522,22 @@ public class YangList extends YangNode |
528 | * Validates key statement of list. | 522 | * Validates key statement of list. |
529 | * | 523 | * |
530 | * @param leaves list of leaf attributes of list | 524 | * @param leaves list of leaf attributes of list |
525 | + * @param leafLists list of leaf-list attributes of list | ||
531 | * @param keys list of key attributes of list | 526 | * @param keys list of key attributes of list |
532 | * @throws DataModelException a violation of data model rules | 527 | * @throws DataModelException a violation of data model rules |
533 | */ | 528 | */ |
534 | - private void validateLeafKey(List<YangLeaf> leaves, List<String> keys) throws DataModelException { | 529 | + private void validateKey(List<YangLeaf> leaves, List<YangLeafList> leafLists, List<String> keys) throws |
530 | + DataModelException { | ||
535 | boolean leafFound = false; | 531 | boolean leafFound = false; |
536 | List<YangLeaf> keyLeaves = new LinkedList<>(); | 532 | List<YangLeaf> keyLeaves = new LinkedList<>(); |
533 | + List<YangLeafList> keyLeafLists = new LinkedList<>(); | ||
537 | 534 | ||
538 | /* | 535 | /* |
539 | * 1. Leaf identifier must refer to a child leaf of the list 2. A leaf | 536 | * 1. Leaf identifier must refer to a child leaf of the list 2. A leaf |
540 | * that is part of the key must not be the built-in type "empty". | 537 | * that is part of the key must not be the built-in type "empty". |
541 | */ | 538 | */ |
542 | for (String key : keys) { | 539 | for (String key : keys) { |
540 | + if (leaves != null && !leaves.isEmpty()) { | ||
543 | for (YangLeaf leaf : leaves) { | 541 | for (YangLeaf leaf : leaves) { |
544 | if (key.equals(leaf.getName())) { | 542 | if (key.equals(leaf.getName())) { |
545 | if (leaf.getDataType().getDataType() == YangDataTypes.EMPTY) { | 543 | if (leaf.getDataType().getDataType() == YangDataTypes.EMPTY) { |
... | @@ -551,53 +549,24 @@ public class YangList extends YangNode | ... | @@ -551,53 +549,24 @@ public class YangList extends YangNode |
551 | break; | 549 | break; |
552 | } | 550 | } |
553 | } | 551 | } |
554 | - if (!leafFound) { | ||
555 | - throw new DataModelException("Leaf identifier must refer to a child leaf of the list"); | ||
556 | - } | ||
557 | - leafFound = false; | ||
558 | - } | ||
559 | - | ||
560 | - /* | ||
561 | - * All key leafs in a list MUST have the same value for their "config" | ||
562 | - * as the list itself. | ||
563 | - */ | ||
564 | - for (YangLeaf keyLeaf : keyLeaves) { | ||
565 | - if (isConfig != keyLeaf.isConfig()) { | ||
566 | - throw new DataModelException("All key leafs in a list must have the same value for their" + | ||
567 | - " \"config\" as the list itself."); | ||
568 | - } | ||
569 | - } | ||
570 | } | 552 | } |
571 | 553 | ||
572 | - /** | 554 | + if (leafLists != null && !leafLists.isEmpty()) { |
573 | - * Validates key statement of list. | ||
574 | - * | ||
575 | - * @param leafLists list of leaf-list attributes of list | ||
576 | - * @param keys list of key attributes of list | ||
577 | - * @throws DataModelException a violation of data model rules | ||
578 | - */ | ||
579 | - private void validateLeafListKey(List<YangLeafList> leafLists, List<String> keys) throws DataModelException { | ||
580 | - boolean leafFound = false; | ||
581 | - List<YangLeafList> keyLeafLists = new LinkedList<>(); | ||
582 | - | ||
583 | - /* | ||
584 | - * 1. Leaf identifier must refer to a child leaf of the list 2. A leaf | ||
585 | - * that is part of the key must not be the built-in type "empty". | ||
586 | - */ | ||
587 | - for (String key : keys) { | ||
588 | for (YangLeafList leafList : leafLists) { | 555 | for (YangLeafList leafList : leafLists) { |
589 | if (key.equals(leafList.getName())) { | 556 | if (key.equals(leafList.getName())) { |
590 | if (leafList.getDataType().getDataType() == YangDataTypes.EMPTY) { | 557 | if (leafList.getDataType().getDataType() == YangDataTypes.EMPTY) { |
591 | - throw new DataModelException(" A leaf-list that is part of the key must not be the built-in " + | 558 | + throw new DataModelException(" A leaf-list that is part of the key" + |
592 | - "type \"empty\"."); | 559 | + " must not be the built-in type \"empty\"."); |
593 | } | 560 | } |
594 | leafFound = true; | 561 | leafFound = true; |
595 | keyLeafLists.add(leafList); | 562 | keyLeafLists.add(leafList); |
596 | break; | 563 | break; |
597 | } | 564 | } |
598 | } | 565 | } |
599 | - if (!leafFound) { | 566 | + } |
600 | - throw new DataModelException("Leaf-list identifier must refer to a child leaf of the list"); | 567 | + |
568 | + if (!leafFound && !isUsesPresentInList()) { | ||
569 | + throw new DataModelException("An identifier, in key, must refer to a child leaf of the list"); | ||
601 | } | 570 | } |
602 | leafFound = false; | 571 | leafFound = false; |
603 | } | 572 | } |
... | @@ -606,6 +575,17 @@ public class YangList extends YangNode | ... | @@ -606,6 +575,17 @@ public class YangList extends YangNode |
606 | * All key leafs in a list MUST have the same value for their "config" | 575 | * All key leafs in a list MUST have the same value for their "config" |
607 | * as the list itself. | 576 | * as the list itself. |
608 | */ | 577 | */ |
578 | + for (YangLeaf keyLeaf : keyLeaves) { | ||
579 | + if (isConfig != keyLeaf.isConfig()) { | ||
580 | + throw new DataModelException("All key leafs in a list must have the same value for their" + | ||
581 | + " \"config\" as the list itself."); | ||
582 | + } | ||
583 | + } | ||
584 | + | ||
585 | + /* | ||
586 | + * All key leafs in a list MUST have the same value for their "config" | ||
587 | + * as the list itself. | ||
588 | + */ | ||
609 | for (YangLeafList keyLeafList : keyLeafLists) { | 589 | for (YangLeafList keyLeafList : keyLeafLists) { |
610 | if (isConfig() != keyLeafList.isConfig()) { | 590 | if (isConfig() != keyLeafList.isConfig()) { |
611 | throw new DataModelException("All key leaf-lists in a list must have the same value for their" + | 591 | throw new DataModelException("All key leaf-lists in a list must have the same value for their" + |
... | @@ -627,4 +607,16 @@ public class YangList extends YangNode | ... | @@ -627,4 +607,16 @@ public class YangList extends YangNode |
627 | getName() + "\""); | 607 | getName() + "\""); |
628 | } | 608 | } |
629 | } | 609 | } |
610 | + | ||
611 | + private boolean isUsesPresentInList() { | ||
612 | + YangNode node = this.getChild(); | ||
613 | + while (node != null) { | ||
614 | + if (node instanceof YangUses) { | ||
615 | + return true; | ||
616 | + } | ||
617 | + node = node.getNextSibling(); | ||
618 | + } | ||
619 | + return false; | ||
620 | + } | ||
621 | + | ||
630 | } | 622 | } | ... | ... |
... | @@ -19,6 +19,8 @@ package org.onosproject.yangutils.datamodel; | ... | @@ -19,6 +19,8 @@ package org.onosproject.yangutils.datamodel; |
19 | import java.util.LinkedList; | 19 | import java.util.LinkedList; |
20 | import java.util.List; | 20 | import java.util.List; |
21 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 21 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; |
22 | +import org.onosproject.yangutils.parser.Parsable; | ||
23 | +import org.onosproject.yangutils.utils.YangConstructType; | ||
22 | import org.onosproject.yangutils.utils.builtindatatype.YangBuiltInDataTypeInfo; | 24 | import org.onosproject.yangutils.utils.builtindatatype.YangBuiltInDataTypeInfo; |
23 | 25 | ||
24 | import static org.onosproject.yangutils.utils.builtindatatype.BuiltInTypeObjectFactory.getDataObjectFromString; | 26 | import static org.onosproject.yangutils.utils.builtindatatype.BuiltInTypeObjectFactory.getDataObjectFromString; |
... | @@ -55,7 +57,7 @@ import static com.google.common.base.Preconditions.checkNotNull; | ... | @@ -55,7 +57,7 @@ import static com.google.common.base.Preconditions.checkNotNull; |
55 | * @param <T> range type (data type) | 57 | * @param <T> range type (data type) |
56 | */ | 58 | */ |
57 | public class YangRangeRestriction<T extends YangBuiltInDataTypeInfo<T>> | 59 | public class YangRangeRestriction<T extends YangBuiltInDataTypeInfo<T>> |
58 | - implements YangDesc, YangReference, YangAppErrorInfo { | 60 | + implements YangDesc, YangReference, YangAppErrorInfo, Parsable { |
59 | 61 | ||
60 | /** | 62 | /** |
61 | * Ascending list of range interval restriction. If the restriction is a | 63 | * Ascending list of range interval restriction. If the restriction is a |
... | @@ -311,4 +313,19 @@ public class YangRangeRestriction<T extends YangBuiltInDataTypeInfo<T>> | ... | @@ -311,4 +313,19 @@ public class YangRangeRestriction<T extends YangBuiltInDataTypeInfo<T>> |
311 | public void setErrorAppTag(String errTag) { | 313 | public void setErrorAppTag(String errTag) { |
312 | errorAppTag = errTag; | 314 | errorAppTag = errTag; |
313 | } | 315 | } |
316 | + | ||
317 | + @Override | ||
318 | + public YangConstructType getYangConstructType() { | ||
319 | + return YangConstructType.RANGE_DATA; | ||
320 | + } | ||
321 | + | ||
322 | + @Override | ||
323 | + public void validateDataOnEntry() throws DataModelException { | ||
324 | + //TODO: implement the method. | ||
325 | + } | ||
326 | + | ||
327 | + @Override | ||
328 | + public void validateDataOnExit() throws DataModelException { | ||
329 | + //TODO: implement the method. | ||
330 | + } | ||
314 | } | 331 | } | ... | ... |
... | @@ -16,6 +16,9 @@ | ... | @@ -16,6 +16,9 @@ |
16 | 16 | ||
17 | package org.onosproject.yangutils.datamodel; | 17 | package org.onosproject.yangutils.datamodel; |
18 | 18 | ||
19 | +import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | ||
20 | +import org.onosproject.yangutils.parser.Parsable; | ||
21 | +import org.onosproject.yangutils.utils.YangConstructType; | ||
19 | import org.onosproject.yangutils.utils.builtindatatype.YangUint64; | 22 | import org.onosproject.yangutils.utils.builtindatatype.YangUint64; |
20 | 23 | ||
21 | /*- | 24 | /*- |
... | @@ -28,7 +31,7 @@ import org.onosproject.yangutils.utils.builtindatatype.YangUint64; | ... | @@ -28,7 +31,7 @@ import org.onosproject.yangutils.utils.builtindatatype.YangUint64; |
28 | /** | 31 | /** |
29 | * Represents the restriction for string data type. | 32 | * Represents the restriction for string data type. |
30 | */ | 33 | */ |
31 | -public class YangStringRestriction { | 34 | +public class YangStringRestriction implements YangDesc, YangReference, YangAppErrorInfo, Parsable { |
32 | 35 | ||
33 | /*- | 36 | /*- |
34 | * Reference RFC 6020. | 37 | * Reference RFC 6020. |
... | @@ -77,6 +80,26 @@ public class YangStringRestriction { | ... | @@ -77,6 +80,26 @@ public class YangStringRestriction { |
77 | private YangPatternRestriction patternRestriction; | 80 | private YangPatternRestriction patternRestriction; |
78 | 81 | ||
79 | /** | 82 | /** |
83 | + * Textual reference. | ||
84 | + */ | ||
85 | + private String reference; | ||
86 | + | ||
87 | + /** | ||
88 | + * Application's error message, to be used for data error. | ||
89 | + */ | ||
90 | + private String errorMessage; | ||
91 | + | ||
92 | + /** | ||
93 | + * Application's error tag, to be filled in data validation error response. | ||
94 | + */ | ||
95 | + private String errorAppTag; | ||
96 | + | ||
97 | + /** | ||
98 | + * Textual description. | ||
99 | + */ | ||
100 | + private String description; | ||
101 | + | ||
102 | + /** | ||
80 | * Creates a YANG string restriction object. | 103 | * Creates a YANG string restriction object. |
81 | */ | 104 | */ |
82 | public YangStringRestriction() { | 105 | public YangStringRestriction() { |
... | @@ -129,4 +152,101 @@ public class YangStringRestriction { | ... | @@ -129,4 +152,101 @@ public class YangStringRestriction { |
129 | } | 152 | } |
130 | getPatternRestriction().addPattern(newPattern); | 153 | getPatternRestriction().addPattern(newPattern); |
131 | } | 154 | } |
155 | + | ||
156 | + /** | ||
157 | + * Returns the textual reference of the string restriction. | ||
158 | + * | ||
159 | + * @return textual reference of the string restriction | ||
160 | + */ | ||
161 | + @Override | ||
162 | + public String getReference() { | ||
163 | + return reference; | ||
164 | + } | ||
165 | + | ||
166 | + /** | ||
167 | + * Sets the textual reference of the string restriction. | ||
168 | + * | ||
169 | + * @param ref textual reference of the string restriction | ||
170 | + */ | ||
171 | + @Override | ||
172 | + public void setReference(String ref) { | ||
173 | + reference = ref; | ||
174 | + } | ||
175 | + | ||
176 | + /** | ||
177 | + * Returns the description of the string restriction. | ||
178 | + * | ||
179 | + * @return description of the string restriction | ||
180 | + */ | ||
181 | + @Override | ||
182 | + public String getDescription() { | ||
183 | + return description; | ||
184 | + } | ||
185 | + | ||
186 | + /** | ||
187 | + * Sets the description of the string restriction. | ||
188 | + * | ||
189 | + * @param desc description of the string restriction | ||
190 | + */ | ||
191 | + @Override | ||
192 | + public void setDescription(String desc) { | ||
193 | + description = desc; | ||
194 | + | ||
195 | + } | ||
196 | + | ||
197 | + /** | ||
198 | + * Returns application's error message, to be used for data error. | ||
199 | + * | ||
200 | + * @return Application's error message, to be used for data error | ||
201 | + */ | ||
202 | + @Override | ||
203 | + public String getGetErrorMessage() { | ||
204 | + return errorMessage; | ||
205 | + } | ||
206 | + | ||
207 | + /** | ||
208 | + * Sets Application's error message, to be used for data error. | ||
209 | + * | ||
210 | + * @param errMsg Application's error message, to be used for data error | ||
211 | + */ | ||
212 | + @Override | ||
213 | + public void setErrorMessage(String errMsg) { | ||
214 | + errorMessage = errMsg; | ||
215 | + | ||
216 | + } | ||
217 | + | ||
218 | + /** | ||
219 | + * Returns application's error tag, to be used for data error. | ||
220 | + * | ||
221 | + * @return application's error tag, to be used for data error | ||
222 | + */ | ||
223 | + @Override | ||
224 | + public String getGetErrorAppTag() { | ||
225 | + return errorAppTag; | ||
226 | + } | ||
227 | + | ||
228 | + /** | ||
229 | + * Sets application's error tag, to be used for data error. | ||
230 | + * | ||
231 | + * @param errTag application's error tag, to be used for data error. | ||
232 | + */ | ||
233 | + @Override | ||
234 | + public void setErrorAppTag(String errTag) { | ||
235 | + errorAppTag = errTag; | ||
236 | + } | ||
237 | + | ||
238 | + @Override | ||
239 | + public YangConstructType getYangConstructType() { | ||
240 | + return YangConstructType.PATTERN_DATA; | ||
241 | + } | ||
242 | + | ||
243 | + @Override | ||
244 | + public void validateDataOnEntry() throws DataModelException { | ||
245 | + //TODO: implement the method. | ||
246 | + } | ||
247 | + | ||
248 | + @Override | ||
249 | + public void validateDataOnExit() throws DataModelException { | ||
250 | + //TODO: implement the method. | ||
251 | + } | ||
132 | } | 252 | } | ... | ... |
... | @@ -16,6 +16,7 @@ | ... | @@ -16,6 +16,7 @@ |
16 | 16 | ||
17 | package org.onosproject.yangutils.datamodel.utils; | 17 | package org.onosproject.yangutils.datamodel.utils; |
18 | 18 | ||
19 | +import java.util.Iterator; | ||
19 | import java.util.List; | 20 | import java.util.List; |
20 | 21 | ||
21 | import org.onosproject.yangutils.datamodel.CollisionDetector; | 22 | import org.onosproject.yangutils.datamodel.CollisionDetector; |
... | @@ -29,6 +30,7 @@ import org.onosproject.yangutils.datamodel.YangResolutionInfo; | ... | @@ -29,6 +30,7 @@ import org.onosproject.yangutils.datamodel.YangResolutionInfo; |
29 | import org.onosproject.yangutils.datamodel.YangRpc; | 30 | import org.onosproject.yangutils.datamodel.YangRpc; |
30 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 31 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; |
31 | import org.onosproject.yangutils.parser.Parsable; | 32 | import org.onosproject.yangutils.parser.Parsable; |
33 | +import org.onosproject.yangutils.plugin.manager.YangFileInfo; | ||
32 | import org.onosproject.yangutils.utils.YangConstructType; | 34 | import org.onosproject.yangutils.utils.YangConstructType; |
33 | 35 | ||
34 | /** | 36 | /** |
... | @@ -240,4 +242,26 @@ public final class DataModelUtils { | ... | @@ -240,4 +242,26 @@ public final class DataModelUtils { |
240 | } | 242 | } |
241 | return false; | 243 | return false; |
242 | } | 244 | } |
245 | + | ||
246 | + /** | ||
247 | + * Returns module's data model node to which sub-module belongs to. | ||
248 | + * | ||
249 | + * @param yangFileInfo YANG file information | ||
250 | + * @param belongsToModuleName name of the module to which sub-module belongs to | ||
251 | + * @return module node to which sub-module belongs to | ||
252 | + * @throws DataModelException when belongs to module node is not found | ||
253 | + */ | ||
254 | + public static YangNode findBelongsToModuleNode(List<YangFileInfo> yangFileInfo, | ||
255 | + String belongsToModuleName) throws DataModelException { | ||
256 | + Iterator<YangFileInfo> yangFileIterator = yangFileInfo.iterator(); | ||
257 | + while (yangFileIterator.hasNext()) { | ||
258 | + YangFileInfo yangFile = yangFileIterator.next(); | ||
259 | + YangNode yangNode = yangFile.getRootNode(); | ||
260 | + if (yangNode.getName().equals(belongsToModuleName)) { | ||
261 | + return yangNode; | ||
262 | + } | ||
263 | + } | ||
264 | + throw new DataModelException("YANG file error : Module " + belongsToModuleName + " to which sub-module " + | ||
265 | + "belongs to is not found."); | ||
266 | + } | ||
243 | } | 267 | } | ... | ... |
This diff could not be displayed because it is too large.
... | @@ -75,6 +75,11 @@ import org.onosproject.yangutils.parser.impl.listeners.UnitsListener; | ... | @@ -75,6 +75,11 @@ import org.onosproject.yangutils.parser.impl.listeners.UnitsListener; |
75 | import org.onosproject.yangutils.parser.impl.listeners.UsesListener; | 75 | import org.onosproject.yangutils.parser.impl.listeners.UsesListener; |
76 | import org.onosproject.yangutils.parser.impl.listeners.ValueListener; | 76 | import org.onosproject.yangutils.parser.impl.listeners.ValueListener; |
77 | import org.onosproject.yangutils.parser.impl.listeners.VersionListener; | 77 | import org.onosproject.yangutils.parser.impl.listeners.VersionListener; |
78 | +import org.onosproject.yangutils.utils.YangConstructType; | ||
79 | + | ||
80 | +import static org.onosproject.yangutils.utils.UtilConstants.UNSUPPORTED_YANG_CONSTRUCT; | ||
81 | +import static org.onosproject.yangutils.utils.UtilConstants.CURRENTLY_UNSUPPORTED; | ||
82 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.handleUnsupportedYangConstruct; | ||
78 | 83 | ||
79 | /** | 84 | /** |
80 | * Represents ANTLR generates parse-tree. ANTLR generates a parse-tree listener interface that responds to events | 85 | * Represents ANTLR generates parse-tree. ANTLR generates a parse-tree listener interface that responds to events |
... | @@ -148,62 +153,62 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -148,62 +153,62 @@ public class TreeWalkListener implements GeneratedYangListener { |
148 | 153 | ||
149 | @Override | 154 | @Override |
150 | public void enterModuleBody(GeneratedYangParser.ModuleBodyContext ctx) { | 155 | public void enterModuleBody(GeneratedYangParser.ModuleBodyContext ctx) { |
151 | - // TODO: implement the method. | 156 | + // do nothing. |
152 | } | 157 | } |
153 | 158 | ||
154 | @Override | 159 | @Override |
155 | public void exitModuleBody(GeneratedYangParser.ModuleBodyContext ctx) { | 160 | public void exitModuleBody(GeneratedYangParser.ModuleBodyContext ctx) { |
156 | - // TODO: implement the method. | 161 | + // do nothing. |
157 | } | 162 | } |
158 | 163 | ||
159 | @Override | 164 | @Override |
160 | public void enterModuleHeaderStatement(GeneratedYangParser.ModuleHeaderStatementContext ctx) { | 165 | public void enterModuleHeaderStatement(GeneratedYangParser.ModuleHeaderStatementContext ctx) { |
161 | - // TODO: implement the method. | 166 | + // do nothing. |
162 | } | 167 | } |
163 | 168 | ||
164 | @Override | 169 | @Override |
165 | public void exitModuleHeaderStatement(GeneratedYangParser.ModuleHeaderStatementContext ctx) { | 170 | public void exitModuleHeaderStatement(GeneratedYangParser.ModuleHeaderStatementContext ctx) { |
166 | - // TODO: implement the method. | 171 | + // do nothing. |
167 | } | 172 | } |
168 | 173 | ||
169 | @Override | 174 | @Override |
170 | public void enterLinkageStatements(GeneratedYangParser.LinkageStatementsContext ctx) { | 175 | public void enterLinkageStatements(GeneratedYangParser.LinkageStatementsContext ctx) { |
171 | - // TODO: implement the method. | 176 | + // do nothing. |
172 | } | 177 | } |
173 | 178 | ||
174 | @Override | 179 | @Override |
175 | public void exitLinkageStatements(GeneratedYangParser.LinkageStatementsContext ctx) { | 180 | public void exitLinkageStatements(GeneratedYangParser.LinkageStatementsContext ctx) { |
176 | - // TODO: implement the method. | 181 | + // do nothing. |
177 | } | 182 | } |
178 | 183 | ||
179 | @Override | 184 | @Override |
180 | public void enterMetaStatements(GeneratedYangParser.MetaStatementsContext ctx) { | 185 | public void enterMetaStatements(GeneratedYangParser.MetaStatementsContext ctx) { |
181 | - // TODO: implement the method. | 186 | + // do nothing. |
182 | } | 187 | } |
183 | 188 | ||
184 | @Override | 189 | @Override |
185 | public void exitMetaStatements(GeneratedYangParser.MetaStatementsContext ctx) { | 190 | public void exitMetaStatements(GeneratedYangParser.MetaStatementsContext ctx) { |
186 | - // TODO: implement the method. | 191 | + // do nothing. |
187 | } | 192 | } |
188 | 193 | ||
189 | @Override | 194 | @Override |
190 | public void enterRevisionStatements(GeneratedYangParser.RevisionStatementsContext ctx) { | 195 | public void enterRevisionStatements(GeneratedYangParser.RevisionStatementsContext ctx) { |
191 | - // TODO: implement the method. | 196 | + // do nothing. |
192 | } | 197 | } |
193 | 198 | ||
194 | @Override | 199 | @Override |
195 | public void exitRevisionStatements(GeneratedYangParser.RevisionStatementsContext ctx) { | 200 | public void exitRevisionStatements(GeneratedYangParser.RevisionStatementsContext ctx) { |
196 | - // TODO: implement the method. | 201 | + // do nothing. |
197 | } | 202 | } |
198 | 203 | ||
199 | @Override | 204 | @Override |
200 | public void enterBodyStatements(GeneratedYangParser.BodyStatementsContext ctx) { | 205 | public void enterBodyStatements(GeneratedYangParser.BodyStatementsContext ctx) { |
201 | - // TODO: implement the method. | 206 | + // do nothing. |
202 | } | 207 | } |
203 | 208 | ||
204 | @Override | 209 | @Override |
205 | public void exitBodyStatements(GeneratedYangParser.BodyStatementsContext ctx) { | 210 | public void exitBodyStatements(GeneratedYangParser.BodyStatementsContext ctx) { |
206 | - // TODO: implement the method. | 211 | + // do nothing. |
207 | } | 212 | } |
208 | 213 | ||
209 | @Override | 214 | @Override |
... | @@ -213,7 +218,7 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -213,7 +218,7 @@ public class TreeWalkListener implements GeneratedYangListener { |
213 | 218 | ||
214 | @Override | 219 | @Override |
215 | public void exitYangVersionStatement(GeneratedYangParser.YangVersionStatementContext ctx) { | 220 | public void exitYangVersionStatement(GeneratedYangParser.YangVersionStatementContext ctx) { |
216 | - // TODO: implement the method. | 221 | + // do nothing. |
217 | } | 222 | } |
218 | 223 | ||
219 | @Override | 224 | @Override |
... | @@ -223,7 +228,7 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -223,7 +228,7 @@ public class TreeWalkListener implements GeneratedYangListener { |
223 | 228 | ||
224 | @Override | 229 | @Override |
225 | public void exitNamespaceStatement(GeneratedYangParser.NamespaceStatementContext ctx) { | 230 | public void exitNamespaceStatement(GeneratedYangParser.NamespaceStatementContext ctx) { |
226 | - // TODO: implement the method. | 231 | + // do nothing. |
227 | } | 232 | } |
228 | 233 | ||
229 | @Override | 234 | @Override |
... | @@ -233,7 +238,7 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -233,7 +238,7 @@ public class TreeWalkListener implements GeneratedYangListener { |
233 | 238 | ||
234 | @Override | 239 | @Override |
235 | public void exitPrefixStatement(GeneratedYangParser.PrefixStatementContext ctx) { | 240 | public void exitPrefixStatement(GeneratedYangParser.PrefixStatementContext ctx) { |
236 | - // TODO: implement the method. | 241 | + // do nothing. |
237 | } | 242 | } |
238 | 243 | ||
239 | @Override | 244 | @Override |
... | @@ -248,12 +253,12 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -248,12 +253,12 @@ public class TreeWalkListener implements GeneratedYangListener { |
248 | 253 | ||
249 | @Override | 254 | @Override |
250 | public void enterImportStatementBody(GeneratedYangParser.ImportStatementBodyContext ctx) { | 255 | public void enterImportStatementBody(GeneratedYangParser.ImportStatementBodyContext ctx) { |
251 | - // TODO: implement the method. | 256 | + // do nothing. |
252 | } | 257 | } |
253 | 258 | ||
254 | @Override | 259 | @Override |
255 | public void exitImportStatementBody(GeneratedYangParser.ImportStatementBodyContext ctx) { | 260 | public void exitImportStatementBody(GeneratedYangParser.ImportStatementBodyContext ctx) { |
256 | - // TODO: implement the method. | 261 | + // do nothing. |
257 | } | 262 | } |
258 | 263 | ||
259 | @Override | 264 | @Override |
... | @@ -263,7 +268,7 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -263,7 +268,7 @@ public class TreeWalkListener implements GeneratedYangListener { |
263 | 268 | ||
264 | @Override | 269 | @Override |
265 | public void exitRevisionDateStatement(GeneratedYangParser.RevisionDateStatementContext ctx) { | 270 | public void exitRevisionDateStatement(GeneratedYangParser.RevisionDateStatementContext ctx) { |
266 | - // TODO: implement the method. | 271 | + // do nothing. |
267 | } | 272 | } |
268 | 273 | ||
269 | @Override | 274 | @Override |
... | @@ -283,7 +288,7 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -283,7 +288,7 @@ public class TreeWalkListener implements GeneratedYangListener { |
283 | 288 | ||
284 | @Override | 289 | @Override |
285 | public void exitOrganizationStatement(GeneratedYangParser.OrganizationStatementContext ctx) { | 290 | public void exitOrganizationStatement(GeneratedYangParser.OrganizationStatementContext ctx) { |
286 | - // TODO: implement the method. | 291 | + // do nothing. |
287 | } | 292 | } |
288 | 293 | ||
289 | @Override | 294 | @Override |
... | @@ -293,7 +298,7 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -293,7 +298,7 @@ public class TreeWalkListener implements GeneratedYangListener { |
293 | 298 | ||
294 | @Override | 299 | @Override |
295 | public void exitContactStatement(GeneratedYangParser.ContactStatementContext ctx) { | 300 | public void exitContactStatement(GeneratedYangParser.ContactStatementContext ctx) { |
296 | - // TODO: implement the method. | 301 | + // do nothing. |
297 | } | 302 | } |
298 | 303 | ||
299 | @Override | 304 | @Override |
... | @@ -303,7 +308,7 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -303,7 +308,7 @@ public class TreeWalkListener implements GeneratedYangListener { |
303 | 308 | ||
304 | @Override | 309 | @Override |
305 | public void exitDescriptionStatement(GeneratedYangParser.DescriptionStatementContext ctx) { | 310 | public void exitDescriptionStatement(GeneratedYangParser.DescriptionStatementContext ctx) { |
306 | - // TODO: implement the method. | 311 | + // do nothing. |
307 | } | 312 | } |
308 | 313 | ||
309 | @Override | 314 | @Override |
... | @@ -313,7 +318,7 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -313,7 +318,7 @@ public class TreeWalkListener implements GeneratedYangListener { |
313 | 318 | ||
314 | @Override | 319 | @Override |
315 | public void exitReferenceStatement(GeneratedYangParser.ReferenceStatementContext ctx) { | 320 | public void exitReferenceStatement(GeneratedYangParser.ReferenceStatementContext ctx) { |
316 | - // TODO: implement the method. | 321 | + // do nothing. |
317 | } | 322 | } |
318 | 323 | ||
319 | @Override | 324 | @Override |
... | @@ -328,12 +333,12 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -328,12 +333,12 @@ public class TreeWalkListener implements GeneratedYangListener { |
328 | 333 | ||
329 | @Override | 334 | @Override |
330 | public void enterRevisionStatementBody(GeneratedYangParser.RevisionStatementBodyContext ctx) { | 335 | public void enterRevisionStatementBody(GeneratedYangParser.RevisionStatementBodyContext ctx) { |
331 | - // TODO: implement the method. | 336 | + // do nothing. |
332 | } | 337 | } |
333 | 338 | ||
334 | @Override | 339 | @Override |
335 | public void exitRevisionStatementBody(GeneratedYangParser.RevisionStatementBodyContext ctx) { | 340 | public void exitRevisionStatementBody(GeneratedYangParser.RevisionStatementBodyContext ctx) { |
336 | - // TODO: implement the method. | 341 | + // do nothing. |
337 | } | 342 | } |
338 | 343 | ||
339 | @Override | 344 | @Override |
... | @@ -348,22 +353,22 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -348,22 +353,22 @@ public class TreeWalkListener implements GeneratedYangListener { |
348 | 353 | ||
349 | @Override | 354 | @Override |
350 | public void enterSubmoduleBody(GeneratedYangParser.SubmoduleBodyContext ctx) { | 355 | public void enterSubmoduleBody(GeneratedYangParser.SubmoduleBodyContext ctx) { |
351 | - // TODO: implement the method. | 356 | + // do nothing. |
352 | } | 357 | } |
353 | 358 | ||
354 | @Override | 359 | @Override |
355 | public void exitSubmoduleBody(GeneratedYangParser.SubmoduleBodyContext ctx) { | 360 | public void exitSubmoduleBody(GeneratedYangParser.SubmoduleBodyContext ctx) { |
356 | - // TODO: implement the method. | 361 | + // do nothing. |
357 | } | 362 | } |
358 | 363 | ||
359 | @Override | 364 | @Override |
360 | public void enterSubmoduleHeaderStatement(GeneratedYangParser.SubmoduleHeaderStatementContext ctx) { | 365 | public void enterSubmoduleHeaderStatement(GeneratedYangParser.SubmoduleHeaderStatementContext ctx) { |
361 | - // TODO: implement the method. | 366 | + // do nothing. |
362 | } | 367 | } |
363 | 368 | ||
364 | @Override | 369 | @Override |
365 | public void exitSubmoduleHeaderStatement(GeneratedYangParser.SubmoduleHeaderStatementContext ctx) { | 370 | public void exitSubmoduleHeaderStatement(GeneratedYangParser.SubmoduleHeaderStatementContext ctx) { |
366 | - // TODO: implement the method. | 371 | + // do nothing. |
367 | } | 372 | } |
368 | 373 | ||
369 | @Override | 374 | @Override |
... | @@ -378,132 +383,132 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -378,132 +383,132 @@ public class TreeWalkListener implements GeneratedYangListener { |
378 | 383 | ||
379 | @Override | 384 | @Override |
380 | public void enterBelongstoStatementBody(GeneratedYangParser.BelongstoStatementBodyContext ctx) { | 385 | public void enterBelongstoStatementBody(GeneratedYangParser.BelongstoStatementBodyContext ctx) { |
381 | - // TODO: implement the method. | 386 | + // do nothing. |
382 | } | 387 | } |
383 | 388 | ||
384 | @Override | 389 | @Override |
385 | public void exitBelongstoStatementBody(GeneratedYangParser.BelongstoStatementBodyContext ctx) { | 390 | public void exitBelongstoStatementBody(GeneratedYangParser.BelongstoStatementBodyContext ctx) { |
386 | - // TODO: implement the method. | 391 | + // do nothing. |
387 | } | 392 | } |
388 | 393 | ||
389 | @Override | 394 | @Override |
390 | public void enterExtensionStatement(GeneratedYangParser.ExtensionStatementContext ctx) { | 395 | public void enterExtensionStatement(GeneratedYangParser.ExtensionStatementContext ctx) { |
391 | - // TODO: implement the method. | 396 | + handleUnsupportedYangConstruct(YangConstructType.EXTENSION_DATA, ctx, UNSUPPORTED_YANG_CONSTRUCT); |
392 | } | 397 | } |
393 | 398 | ||
394 | @Override | 399 | @Override |
395 | public void exitExtensionStatement(GeneratedYangParser.ExtensionStatementContext ctx) { | 400 | public void exitExtensionStatement(GeneratedYangParser.ExtensionStatementContext ctx) { |
396 | - // TODO: implement the method. | 401 | + // do nothing |
397 | } | 402 | } |
398 | 403 | ||
399 | @Override | 404 | @Override |
400 | public void enterExtensionBody(GeneratedYangParser.ExtensionBodyContext ctx) { | 405 | public void enterExtensionBody(GeneratedYangParser.ExtensionBodyContext ctx) { |
401 | - // TODO: implement the method. | 406 | + // do nothing. |
402 | } | 407 | } |
403 | 408 | ||
404 | @Override | 409 | @Override |
405 | public void exitExtensionBody(GeneratedYangParser.ExtensionBodyContext ctx) { | 410 | public void exitExtensionBody(GeneratedYangParser.ExtensionBodyContext ctx) { |
406 | - // TODO: implement the method. | 411 | + // do nothing. |
407 | } | 412 | } |
408 | 413 | ||
409 | @Override | 414 | @Override |
410 | public void enterArgumentStatement(GeneratedYangParser.ArgumentStatementContext ctx) { | 415 | public void enterArgumentStatement(GeneratedYangParser.ArgumentStatementContext ctx) { |
411 | - // TODO: implement the method. | 416 | + // do nothing. |
412 | } | 417 | } |
413 | 418 | ||
414 | @Override | 419 | @Override |
415 | public void exitArgumentStatement(GeneratedYangParser.ArgumentStatementContext ctx) { | 420 | public void exitArgumentStatement(GeneratedYangParser.ArgumentStatementContext ctx) { |
416 | - // TODO: implement the method. | 421 | + // do nothing. |
417 | } | 422 | } |
418 | 423 | ||
419 | @Override | 424 | @Override |
420 | public void enterArgumentBody(GeneratedYangParser.ArgumentBodyContext ctx) { | 425 | public void enterArgumentBody(GeneratedYangParser.ArgumentBodyContext ctx) { |
421 | - // TODO: implement the method. | 426 | + // do nothing. |
422 | } | 427 | } |
423 | 428 | ||
424 | @Override | 429 | @Override |
425 | public void exitArgumentBody(GeneratedYangParser.ArgumentBodyContext ctx) { | 430 | public void exitArgumentBody(GeneratedYangParser.ArgumentBodyContext ctx) { |
426 | - // TODO: implement the method. | 431 | + // do nothing. |
427 | } | 432 | } |
428 | 433 | ||
429 | @Override | 434 | @Override |
430 | public void enterYinElementStatement(GeneratedYangParser.YinElementStatementContext ctx) { | 435 | public void enterYinElementStatement(GeneratedYangParser.YinElementStatementContext ctx) { |
431 | - // TODO: implement the method. | 436 | + // do nothing. |
432 | } | 437 | } |
433 | 438 | ||
434 | @Override | 439 | @Override |
435 | public void exitYinElementStatement(GeneratedYangParser.YinElementStatementContext ctx) { | 440 | public void exitYinElementStatement(GeneratedYangParser.YinElementStatementContext ctx) { |
436 | - // TODO: implement the method. | 441 | + // do nothing. |
437 | } | 442 | } |
438 | 443 | ||
439 | @Override | 444 | @Override |
440 | public void enterIdentityStatement(GeneratedYangParser.IdentityStatementContext ctx) { | 445 | public void enterIdentityStatement(GeneratedYangParser.IdentityStatementContext ctx) { |
441 | - // TODO: implement the method. | 446 | + handleUnsupportedYangConstruct(YangConstructType.IDENTITY_DATA, ctx, CURRENTLY_UNSUPPORTED); |
442 | } | 447 | } |
443 | 448 | ||
444 | @Override | 449 | @Override |
445 | public void exitIdentityStatement(GeneratedYangParser.IdentityStatementContext ctx) { | 450 | public void exitIdentityStatement(GeneratedYangParser.IdentityStatementContext ctx) { |
446 | - // TODO: implement the method. | 451 | + // do nothing. |
447 | } | 452 | } |
448 | 453 | ||
449 | @Override | 454 | @Override |
450 | public void enterIdentityBody(GeneratedYangParser.IdentityBodyContext ctx) { | 455 | public void enterIdentityBody(GeneratedYangParser.IdentityBodyContext ctx) { |
451 | - // TODO: implement the method. | 456 | + // do nothing. |
452 | } | 457 | } |
453 | 458 | ||
454 | @Override | 459 | @Override |
455 | public void exitIdentityBody(GeneratedYangParser.IdentityBodyContext ctx) { | 460 | public void exitIdentityBody(GeneratedYangParser.IdentityBodyContext ctx) { |
456 | - // TODO: implement the method. | 461 | + // do nothing. |
457 | } | 462 | } |
458 | 463 | ||
459 | @Override | 464 | @Override |
460 | public void enterBaseStatement(GeneratedYangParser.BaseStatementContext ctx) { | 465 | public void enterBaseStatement(GeneratedYangParser.BaseStatementContext ctx) { |
461 | - // TODO: implement the method. | 466 | + handleUnsupportedYangConstruct(YangConstructType.BASE_DATA, ctx, CURRENTLY_UNSUPPORTED); |
462 | } | 467 | } |
463 | 468 | ||
464 | @Override | 469 | @Override |
465 | public void exitBaseStatement(GeneratedYangParser.BaseStatementContext ctx) { | 470 | public void exitBaseStatement(GeneratedYangParser.BaseStatementContext ctx) { |
466 | - // TODO: implement the method. | 471 | + // do nothing. |
467 | } | 472 | } |
468 | 473 | ||
469 | @Override | 474 | @Override |
470 | public void enterFeatureStatement(GeneratedYangParser.FeatureStatementContext ctx) { | 475 | public void enterFeatureStatement(GeneratedYangParser.FeatureStatementContext ctx) { |
471 | - // TODO: implement the method. | 476 | + handleUnsupportedYangConstruct(YangConstructType.FEATURE_DATA, ctx, CURRENTLY_UNSUPPORTED); |
472 | } | 477 | } |
473 | 478 | ||
474 | @Override | 479 | @Override |
475 | public void exitFeatureStatement(GeneratedYangParser.FeatureStatementContext ctx) { | 480 | public void exitFeatureStatement(GeneratedYangParser.FeatureStatementContext ctx) { |
476 | - // TODO: implement the method. | 481 | + //TODO: to be implemented |
477 | } | 482 | } |
478 | 483 | ||
479 | @Override | 484 | @Override |
480 | public void enterFeatureBody(GeneratedYangParser.FeatureBodyContext ctx) { | 485 | public void enterFeatureBody(GeneratedYangParser.FeatureBodyContext ctx) { |
481 | - // TODO: implement the method. | 486 | + //TODO : to be implemented |
482 | } | 487 | } |
483 | 488 | ||
484 | @Override | 489 | @Override |
485 | public void exitFeatureBody(GeneratedYangParser.FeatureBodyContext ctx) { | 490 | public void exitFeatureBody(GeneratedYangParser.FeatureBodyContext ctx) { |
486 | - // TODO: implement the method. | 491 | + //TODO : to be implemented |
487 | } | 492 | } |
488 | 493 | ||
489 | @Override | 494 | @Override |
490 | public void enterDataDefStatement(GeneratedYangParser.DataDefStatementContext ctx) { | 495 | public void enterDataDefStatement(GeneratedYangParser.DataDefStatementContext ctx) { |
491 | - // TODO: implement the method. | 496 | + // do nothing. |
492 | } | 497 | } |
493 | 498 | ||
494 | @Override | 499 | @Override |
495 | public void exitDataDefStatement(GeneratedYangParser.DataDefStatementContext ctx) { | 500 | public void exitDataDefStatement(GeneratedYangParser.DataDefStatementContext ctx) { |
496 | - // TODO: implement the method. | 501 | + // do nothing. |
497 | } | 502 | } |
498 | 503 | ||
499 | @Override | 504 | @Override |
500 | public void enterIfFeatureStatement(GeneratedYangParser.IfFeatureStatementContext ctx) { | 505 | public void enterIfFeatureStatement(GeneratedYangParser.IfFeatureStatementContext ctx) { |
501 | - // TODO: implement the method. | 506 | + // TODO: to be implemented |
502 | } | 507 | } |
503 | 508 | ||
504 | @Override | 509 | @Override |
505 | public void exitIfFeatureStatement(GeneratedYangParser.IfFeatureStatementContext ctx) { | 510 | public void exitIfFeatureStatement(GeneratedYangParser.IfFeatureStatementContext ctx) { |
506 | - // TODO: implement the method. | 511 | + // TODO: to be implemented |
507 | } | 512 | } |
508 | 513 | ||
509 | @Override | 514 | @Override |
... | @@ -513,7 +518,7 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -513,7 +518,7 @@ public class TreeWalkListener implements GeneratedYangListener { |
513 | 518 | ||
514 | @Override | 519 | @Override |
515 | public void exitUnitsStatement(GeneratedYangParser.UnitsStatementContext ctx) { | 520 | public void exitUnitsStatement(GeneratedYangParser.UnitsStatementContext ctx) { |
516 | - // TODO: implement the method. | 521 | + // do nothing. |
517 | } | 522 | } |
518 | 523 | ||
519 | @Override | 524 | @Override |
... | @@ -538,22 +543,32 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -538,22 +543,32 @@ public class TreeWalkListener implements GeneratedYangListener { |
538 | 543 | ||
539 | @Override | 544 | @Override |
540 | public void enterTypeBodyStatements(GeneratedYangParser.TypeBodyStatementsContext ctx) { | 545 | public void enterTypeBodyStatements(GeneratedYangParser.TypeBodyStatementsContext ctx) { |
541 | - // TODO: implement the method. | 546 | + // do nothing. |
542 | } | 547 | } |
543 | 548 | ||
544 | @Override | 549 | @Override |
545 | public void exitTypeBodyStatements(GeneratedYangParser.TypeBodyStatementsContext ctx) { | 550 | public void exitTypeBodyStatements(GeneratedYangParser.TypeBodyStatementsContext ctx) { |
551 | + // do nothing. | ||
552 | + } | ||
553 | + | ||
554 | + @Override | ||
555 | + public void enterDecimal64Specification(GeneratedYangParser.Decimal64SpecificationContext ctx) { | ||
546 | // TODO: implement the method. | 556 | // TODO: implement the method. |
547 | } | 557 | } |
548 | 558 | ||
549 | @Override | 559 | @Override |
550 | - public void enterNumericalRestrictions(GeneratedYangParser.NumericalRestrictionsContext ctx) { | 560 | + public void exitDecimal64Specification(GeneratedYangParser.Decimal64SpecificationContext ctx) { |
551 | // TODO: implement the method. | 561 | // TODO: implement the method. |
552 | } | 562 | } |
553 | 563 | ||
554 | @Override | 564 | @Override |
565 | + public void enterNumericalRestrictions(GeneratedYangParser.NumericalRestrictionsContext ctx) { | ||
566 | + // do nothing. | ||
567 | + } | ||
568 | + | ||
569 | + @Override | ||
555 | public void exitNumericalRestrictions(GeneratedYangParser.NumericalRestrictionsContext ctx) { | 570 | public void exitNumericalRestrictions(GeneratedYangParser.NumericalRestrictionsContext ctx) { |
556 | - // TODO: implement the method. | 571 | + // do nothing. |
557 | } | 572 | } |
558 | 573 | ||
559 | @Override | 574 | @Override |
... | @@ -563,27 +578,27 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -563,27 +578,27 @@ public class TreeWalkListener implements GeneratedYangListener { |
563 | 578 | ||
564 | @Override | 579 | @Override |
565 | public void exitRangeStatement(GeneratedYangParser.RangeStatementContext ctx) { | 580 | public void exitRangeStatement(GeneratedYangParser.RangeStatementContext ctx) { |
566 | - // TODO: implement the method. | 581 | + RangeRestrictionListener.processRangeRestrictionExit(this, ctx); |
567 | } | 582 | } |
568 | 583 | ||
569 | @Override | 584 | @Override |
570 | public void enterCommonStatements(GeneratedYangParser.CommonStatementsContext ctx) { | 585 | public void enterCommonStatements(GeneratedYangParser.CommonStatementsContext ctx) { |
571 | - // TODO: implement the method. | 586 | + // do nothing. |
572 | } | 587 | } |
573 | 588 | ||
574 | @Override | 589 | @Override |
575 | public void exitCommonStatements(GeneratedYangParser.CommonStatementsContext ctx) { | 590 | public void exitCommonStatements(GeneratedYangParser.CommonStatementsContext ctx) { |
576 | - // TODO: implement the method. | 591 | + // do nothing. |
577 | } | 592 | } |
578 | 593 | ||
579 | @Override | 594 | @Override |
580 | public void enterStringRestrictions(GeneratedYangParser.StringRestrictionsContext ctx) { | 595 | public void enterStringRestrictions(GeneratedYangParser.StringRestrictionsContext ctx) { |
581 | - // TODO: implement the method. | 596 | + // do nothing. |
582 | } | 597 | } |
583 | 598 | ||
584 | @Override | 599 | @Override |
585 | public void exitStringRestrictions(GeneratedYangParser.StringRestrictionsContext ctx) { | 600 | public void exitStringRestrictions(GeneratedYangParser.StringRestrictionsContext ctx) { |
586 | - // TODO: implement the method. | 601 | + // do nothing. |
587 | } | 602 | } |
588 | 603 | ||
589 | @Override | 604 | @Override |
... | @@ -593,7 +608,7 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -593,7 +608,7 @@ public class TreeWalkListener implements GeneratedYangListener { |
593 | 608 | ||
594 | @Override | 609 | @Override |
595 | public void exitLengthStatement(GeneratedYangParser.LengthStatementContext ctx) { | 610 | public void exitLengthStatement(GeneratedYangParser.LengthStatementContext ctx) { |
596 | - // TODO: implement the method. | 611 | + LengthRestrictionListener.processLengthRestrictionExit(this, ctx); |
597 | } | 612 | } |
598 | 613 | ||
599 | @Override | 614 | @Override |
... | @@ -603,7 +618,7 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -603,7 +618,7 @@ public class TreeWalkListener implements GeneratedYangListener { |
603 | 618 | ||
604 | @Override | 619 | @Override |
605 | public void exitPatternStatement(GeneratedYangParser.PatternStatementContext ctx) { | 620 | public void exitPatternStatement(GeneratedYangParser.PatternStatementContext ctx) { |
606 | - // TODO: implement the method. | 621 | + PatternRestrictionListener.processPatternRestrictionExit(this, ctx); |
607 | } | 622 | } |
608 | 623 | ||
609 | @Override | 624 | @Override |
... | @@ -613,7 +628,7 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -613,7 +628,7 @@ public class TreeWalkListener implements GeneratedYangListener { |
613 | 628 | ||
614 | @Override | 629 | @Override |
615 | public void exitDefaultStatement(GeneratedYangParser.DefaultStatementContext ctx) { | 630 | public void exitDefaultStatement(GeneratedYangParser.DefaultStatementContext ctx) { |
616 | - // TODO: implement the method. | 631 | + // do nothing. |
617 | } | 632 | } |
618 | 633 | ||
619 | @Override | 634 | @Override |
... | @@ -638,62 +653,62 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -638,62 +653,62 @@ public class TreeWalkListener implements GeneratedYangListener { |
638 | 653 | ||
639 | @Override | 654 | @Override |
640 | public void enterEnumStatementBody(GeneratedYangParser.EnumStatementBodyContext ctx) { | 655 | public void enterEnumStatementBody(GeneratedYangParser.EnumStatementBodyContext ctx) { |
641 | - // TODO: implement the method. | 656 | + // do nothing. |
642 | } | 657 | } |
643 | 658 | ||
644 | @Override | 659 | @Override |
645 | public void exitEnumStatementBody(GeneratedYangParser.EnumStatementBodyContext ctx) { | 660 | public void exitEnumStatementBody(GeneratedYangParser.EnumStatementBodyContext ctx) { |
646 | - // TODO: implement the method. | 661 | + // do nothing. |
647 | } | 662 | } |
648 | 663 | ||
649 | @Override | 664 | @Override |
650 | public void enterLeafrefSpecification(GeneratedYangParser.LeafrefSpecificationContext ctx) { | 665 | public void enterLeafrefSpecification(GeneratedYangParser.LeafrefSpecificationContext ctx) { |
651 | - // TODO: implement the method. | 666 | + // do nothing. |
652 | } | 667 | } |
653 | 668 | ||
654 | @Override | 669 | @Override |
655 | public void exitLeafrefSpecification(GeneratedYangParser.LeafrefSpecificationContext ctx) { | 670 | public void exitLeafrefSpecification(GeneratedYangParser.LeafrefSpecificationContext ctx) { |
656 | - // TODO: implement the method. | 671 | + // do nothing. |
657 | } | 672 | } |
658 | 673 | ||
659 | @Override | 674 | @Override |
660 | public void enterPathStatement(GeneratedYangParser.PathStatementContext ctx) { | 675 | public void enterPathStatement(GeneratedYangParser.PathStatementContext ctx) { |
661 | - // TODO: implement the method. | 676 | + handleUnsupportedYangConstruct(YangConstructType.PATH_DATA, ctx, CURRENTLY_UNSUPPORTED); |
662 | } | 677 | } |
663 | 678 | ||
664 | @Override | 679 | @Override |
665 | public void exitPathStatement(GeneratedYangParser.PathStatementContext ctx) { | 680 | public void exitPathStatement(GeneratedYangParser.PathStatementContext ctx) { |
666 | - // TODO: implement the method. | 681 | + // do nothing. |
667 | } | 682 | } |
668 | 683 | ||
669 | @Override | 684 | @Override |
670 | public void enterRequireInstanceStatement(GeneratedYangParser.RequireInstanceStatementContext ctx) { | 685 | public void enterRequireInstanceStatement(GeneratedYangParser.RequireInstanceStatementContext ctx) { |
671 | - // TODO: implement the method. | 686 | + handleUnsupportedYangConstruct(YangConstructType.REQUIRE_INSTANCE_DATA, ctx, UNSUPPORTED_YANG_CONSTRUCT); |
672 | } | 687 | } |
673 | 688 | ||
674 | @Override | 689 | @Override |
675 | public void exitRequireInstanceStatement(GeneratedYangParser.RequireInstanceStatementContext ctx) { | 690 | public void exitRequireInstanceStatement(GeneratedYangParser.RequireInstanceStatementContext ctx) { |
676 | - // TODO: implement the method. | 691 | + // do nothing. |
677 | } | 692 | } |
678 | 693 | ||
679 | @Override | 694 | @Override |
680 | public void enterInstanceIdentifierSpecification(GeneratedYangParser.InstanceIdentifierSpecificationContext ctx) { | 695 | public void enterInstanceIdentifierSpecification(GeneratedYangParser.InstanceIdentifierSpecificationContext ctx) { |
681 | - // TODO: implement the method. | 696 | + // do nothing. |
682 | } | 697 | } |
683 | 698 | ||
684 | @Override | 699 | @Override |
685 | public void exitInstanceIdentifierSpecification(GeneratedYangParser.InstanceIdentifierSpecificationContext ctx) { | 700 | public void exitInstanceIdentifierSpecification(GeneratedYangParser.InstanceIdentifierSpecificationContext ctx) { |
686 | - // TODO: implement the method. | 701 | + // do nothing. |
687 | } | 702 | } |
688 | 703 | ||
689 | @Override | 704 | @Override |
690 | public void enterIdentityrefSpecification(GeneratedYangParser.IdentityrefSpecificationContext ctx) { | 705 | public void enterIdentityrefSpecification(GeneratedYangParser.IdentityrefSpecificationContext ctx) { |
691 | - // TODO: implement the method. | 706 | + // do nothing. |
692 | } | 707 | } |
693 | 708 | ||
694 | @Override | 709 | @Override |
695 | public void exitIdentityrefSpecification(GeneratedYangParser.IdentityrefSpecificationContext ctx) { | 710 | public void exitIdentityrefSpecification(GeneratedYangParser.IdentityrefSpecificationContext ctx) { |
696 | - // TODO: implement the method. | 711 | + // do nothing. |
697 | } | 712 | } |
698 | 713 | ||
699 | @Override | 714 | @Override |
... | @@ -728,12 +743,12 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -728,12 +743,12 @@ public class TreeWalkListener implements GeneratedYangListener { |
728 | 743 | ||
729 | @Override | 744 | @Override |
730 | public void enterBitBodyStatement(GeneratedYangParser.BitBodyStatementContext ctx) { | 745 | public void enterBitBodyStatement(GeneratedYangParser.BitBodyStatementContext ctx) { |
731 | - // TODO: implement the method. | 746 | + // do nothing. |
732 | } | 747 | } |
733 | 748 | ||
734 | @Override | 749 | @Override |
735 | public void exitBitBodyStatement(GeneratedYangParser.BitBodyStatementContext ctx) { | 750 | public void exitBitBodyStatement(GeneratedYangParser.BitBodyStatementContext ctx) { |
736 | - // TODO: implement the method. | 751 | + // do nothing. |
737 | } | 752 | } |
738 | 753 | ||
739 | @Override | 754 | @Override |
... | @@ -743,7 +758,7 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -743,7 +758,7 @@ public class TreeWalkListener implements GeneratedYangListener { |
743 | 758 | ||
744 | @Override | 759 | @Override |
745 | public void exitPositionStatement(GeneratedYangParser.PositionStatementContext ctx) { | 760 | public void exitPositionStatement(GeneratedYangParser.PositionStatementContext ctx) { |
746 | - // TODO: implement the method. | 761 | + // do nothing. |
747 | } | 762 | } |
748 | 763 | ||
749 | @Override | 764 | @Override |
... | @@ -753,7 +768,7 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -753,7 +768,7 @@ public class TreeWalkListener implements GeneratedYangListener { |
753 | 768 | ||
754 | @Override | 769 | @Override |
755 | public void exitStatusStatement(GeneratedYangParser.StatusStatementContext ctx) { | 770 | public void exitStatusStatement(GeneratedYangParser.StatusStatementContext ctx) { |
756 | - // TODO: implement the method. | 771 | + // do nothing. |
757 | } | 772 | } |
758 | 773 | ||
759 | @Override | 774 | @Override |
... | @@ -763,7 +778,7 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -763,7 +778,7 @@ public class TreeWalkListener implements GeneratedYangListener { |
763 | 778 | ||
764 | @Override | 779 | @Override |
765 | public void exitConfigStatement(GeneratedYangParser.ConfigStatementContext ctx) { | 780 | public void exitConfigStatement(GeneratedYangParser.ConfigStatementContext ctx) { |
766 | - // TODO: implement the method. | 781 | + // do nothing. |
767 | } | 782 | } |
768 | 783 | ||
769 | @Override | 784 | @Override |
... | @@ -773,7 +788,7 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -773,7 +788,7 @@ public class TreeWalkListener implements GeneratedYangListener { |
773 | 788 | ||
774 | @Override | 789 | @Override |
775 | public void exitMandatoryStatement(GeneratedYangParser.MandatoryStatementContext ctx) { | 790 | public void exitMandatoryStatement(GeneratedYangParser.MandatoryStatementContext ctx) { |
776 | - // TODO: implement the method. | 791 | + // do nothing. |
777 | } | 792 | } |
778 | 793 | ||
779 | @Override | 794 | @Override |
... | @@ -783,47 +798,47 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -783,47 +798,47 @@ public class TreeWalkListener implements GeneratedYangListener { |
783 | 798 | ||
784 | @Override | 799 | @Override |
785 | public void exitPresenceStatement(GeneratedYangParser.PresenceStatementContext ctx) { | 800 | public void exitPresenceStatement(GeneratedYangParser.PresenceStatementContext ctx) { |
786 | - // TODO: implement the method. | 801 | + // do nothing. |
787 | } | 802 | } |
788 | 803 | ||
789 | @Override | 804 | @Override |
790 | public void enterOrderedByStatement(GeneratedYangParser.OrderedByStatementContext ctx) { | 805 | public void enterOrderedByStatement(GeneratedYangParser.OrderedByStatementContext ctx) { |
791 | - // TODO: implement the method. | 806 | + handleUnsupportedYangConstruct(YangConstructType.ORDERED_BY_DATA, ctx, CURRENTLY_UNSUPPORTED); |
792 | } | 807 | } |
793 | 808 | ||
794 | @Override | 809 | @Override |
795 | public void exitOrderedByStatement(GeneratedYangParser.OrderedByStatementContext ctx) { | 810 | public void exitOrderedByStatement(GeneratedYangParser.OrderedByStatementContext ctx) { |
796 | - // TODO: implement the method. | 811 | + // do nothing. |
797 | } | 812 | } |
798 | 813 | ||
799 | @Override | 814 | @Override |
800 | public void enterMustStatement(GeneratedYangParser.MustStatementContext ctx) { | 815 | public void enterMustStatement(GeneratedYangParser.MustStatementContext ctx) { |
801 | - // TODO: implement the method. | 816 | + // TODO: to be implemented |
802 | } | 817 | } |
803 | 818 | ||
804 | @Override | 819 | @Override |
805 | public void exitMustStatement(GeneratedYangParser.MustStatementContext ctx) { | 820 | public void exitMustStatement(GeneratedYangParser.MustStatementContext ctx) { |
806 | - // TODO: implement the method. | 821 | + // TODO: to be implemented |
807 | } | 822 | } |
808 | 823 | ||
809 | @Override | 824 | @Override |
810 | public void enterErrorMessageStatement(GeneratedYangParser.ErrorMessageStatementContext ctx) { | 825 | public void enterErrorMessageStatement(GeneratedYangParser.ErrorMessageStatementContext ctx) { |
811 | - // TODO: implement the method. | 826 | + handleUnsupportedYangConstruct(YangConstructType.ERROR_MESSAGE_DATA, ctx, CURRENTLY_UNSUPPORTED); |
812 | } | 827 | } |
813 | 828 | ||
814 | @Override | 829 | @Override |
815 | public void exitErrorMessageStatement(GeneratedYangParser.ErrorMessageStatementContext ctx) { | 830 | public void exitErrorMessageStatement(GeneratedYangParser.ErrorMessageStatementContext ctx) { |
816 | - // TODO: implement the method. | 831 | + // do nothing. |
817 | } | 832 | } |
818 | 833 | ||
819 | @Override | 834 | @Override |
820 | public void enterErrorAppTagStatement(GeneratedYangParser.ErrorAppTagStatementContext ctx) { | 835 | public void enterErrorAppTagStatement(GeneratedYangParser.ErrorAppTagStatementContext ctx) { |
821 | - // TODO: implement the method. | 836 | + handleUnsupportedYangConstruct(YangConstructType.ERROR_APP_TAG_DATA, ctx, CURRENTLY_UNSUPPORTED); |
822 | } | 837 | } |
823 | 838 | ||
824 | @Override | 839 | @Override |
825 | public void exitErrorAppTagStatement(GeneratedYangParser.ErrorAppTagStatementContext ctx) { | 840 | public void exitErrorAppTagStatement(GeneratedYangParser.ErrorAppTagStatementContext ctx) { |
826 | - // TODO: implement the method. | 841 | + //do nothing |
827 | } | 842 | } |
828 | 843 | ||
829 | @Override | 844 | @Override |
... | @@ -833,7 +848,7 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -833,7 +848,7 @@ public class TreeWalkListener implements GeneratedYangListener { |
833 | 848 | ||
834 | @Override | 849 | @Override |
835 | public void exitMinElementsStatement(GeneratedYangParser.MinElementsStatementContext ctx) { | 850 | public void exitMinElementsStatement(GeneratedYangParser.MinElementsStatementContext ctx) { |
836 | - // TODO: implement the method. | 851 | + // do nothing. |
837 | } | 852 | } |
838 | 853 | ||
839 | @Override | 854 | @Override |
... | @@ -843,7 +858,7 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -843,7 +858,7 @@ public class TreeWalkListener implements GeneratedYangListener { |
843 | 858 | ||
844 | @Override | 859 | @Override |
845 | public void exitMaxElementsStatement(GeneratedYangParser.MaxElementsStatementContext ctx) { | 860 | public void exitMaxElementsStatement(GeneratedYangParser.MaxElementsStatementContext ctx) { |
846 | - // TODO: implement the method. | 861 | + // do nothing. |
847 | } | 862 | } |
848 | 863 | ||
849 | @Override | 864 | @Override |
... | @@ -853,7 +868,7 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -853,7 +868,7 @@ public class TreeWalkListener implements GeneratedYangListener { |
853 | 868 | ||
854 | @Override | 869 | @Override |
855 | public void exitValueStatement(GeneratedYangParser.ValueStatementContext ctx) { | 870 | public void exitValueStatement(GeneratedYangParser.ValueStatementContext ctx) { |
856 | - // TODO: implement the method. | 871 | + // do nothing. |
857 | } | 872 | } |
858 | 873 | ||
859 | @Override | 874 | @Override |
... | @@ -913,17 +928,17 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -913,17 +928,17 @@ public class TreeWalkListener implements GeneratedYangListener { |
913 | 928 | ||
914 | @Override | 929 | @Override |
915 | public void exitKeyStatement(GeneratedYangParser.KeyStatementContext ctx) { | 930 | public void exitKeyStatement(GeneratedYangParser.KeyStatementContext ctx) { |
916 | - // TODO: implement the method. | 931 | + // do nothing. |
917 | } | 932 | } |
918 | 933 | ||
919 | @Override | 934 | @Override |
920 | public void enterUniqueStatement(GeneratedYangParser.UniqueStatementContext ctx) { | 935 | public void enterUniqueStatement(GeneratedYangParser.UniqueStatementContext ctx) { |
921 | - // TODO: implement the method. | 936 | + handleUnsupportedYangConstruct(YangConstructType.UNIQUE_DATA, ctx, CURRENTLY_UNSUPPORTED); |
922 | } | 937 | } |
923 | 938 | ||
924 | @Override | 939 | @Override |
925 | public void exitUniqueStatement(GeneratedYangParser.UniqueStatementContext ctx) { | 940 | public void exitUniqueStatement(GeneratedYangParser.UniqueStatementContext ctx) { |
926 | - // TODO: implement the method. | 941 | + // do nothing. |
927 | } | 942 | } |
928 | 943 | ||
929 | @Override | 944 | @Override |
... | @@ -957,6 +972,16 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -957,6 +972,16 @@ public class TreeWalkListener implements GeneratedYangListener { |
957 | } | 972 | } |
958 | 973 | ||
959 | @Override | 974 | @Override |
975 | + public void enterAnyxmlStatement(GeneratedYangParser.AnyxmlStatementContext ctx) { | ||
976 | + handleUnsupportedYangConstruct(YangConstructType.ANYXML_DATA, ctx, UNSUPPORTED_YANG_CONSTRUCT); | ||
977 | + } | ||
978 | + | ||
979 | + @Override | ||
980 | + public void exitAnyxmlStatement(GeneratedYangParser.AnyxmlStatementContext ctx) { | ||
981 | + // do nothing. | ||
982 | + } | ||
983 | + | ||
984 | + @Override | ||
960 | public void enterUsesStatement(GeneratedYangParser.UsesStatementContext ctx) { | 985 | public void enterUsesStatement(GeneratedYangParser.UsesStatementContext ctx) { |
961 | UsesListener.processUsesEntry(this, ctx); | 986 | UsesListener.processUsesEntry(this, ctx); |
962 | } | 987 | } |
... | @@ -968,82 +993,82 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -968,82 +993,82 @@ public class TreeWalkListener implements GeneratedYangListener { |
968 | 993 | ||
969 | @Override | 994 | @Override |
970 | public void enterRefineStatement(GeneratedYangParser.RefineStatementContext ctx) { | 995 | public void enterRefineStatement(GeneratedYangParser.RefineStatementContext ctx) { |
971 | - // TODO: implement the method. | 996 | + handleUnsupportedYangConstruct(YangConstructType.REFINE_DATA, ctx, UNSUPPORTED_YANG_CONSTRUCT); |
972 | } | 997 | } |
973 | 998 | ||
974 | @Override | 999 | @Override |
975 | public void exitRefineStatement(GeneratedYangParser.RefineStatementContext ctx) { | 1000 | public void exitRefineStatement(GeneratedYangParser.RefineStatementContext ctx) { |
976 | - // TODO: implement the method. | 1001 | + // do nothing. |
977 | } | 1002 | } |
978 | 1003 | ||
979 | @Override | 1004 | @Override |
980 | public void enterRefineContainerStatements(GeneratedYangParser.RefineContainerStatementsContext ctx) { | 1005 | public void enterRefineContainerStatements(GeneratedYangParser.RefineContainerStatementsContext ctx) { |
981 | - // TODO: implement the method. | 1006 | + // do nothing. |
982 | } | 1007 | } |
983 | 1008 | ||
984 | @Override | 1009 | @Override |
985 | public void exitRefineContainerStatements(GeneratedYangParser.RefineContainerStatementsContext ctx) { | 1010 | public void exitRefineContainerStatements(GeneratedYangParser.RefineContainerStatementsContext ctx) { |
986 | - // TODO: implement the method. | 1011 | + // do nothing. |
987 | } | 1012 | } |
988 | 1013 | ||
989 | @Override | 1014 | @Override |
990 | public void enterRefineLeafStatements(GeneratedYangParser.RefineLeafStatementsContext ctx) { | 1015 | public void enterRefineLeafStatements(GeneratedYangParser.RefineLeafStatementsContext ctx) { |
991 | - // TODO: implement the method. | 1016 | + // do nothing. |
992 | } | 1017 | } |
993 | 1018 | ||
994 | @Override | 1019 | @Override |
995 | public void exitRefineLeafStatements(GeneratedYangParser.RefineLeafStatementsContext ctx) { | 1020 | public void exitRefineLeafStatements(GeneratedYangParser.RefineLeafStatementsContext ctx) { |
996 | - // TODO: implement the method. | 1021 | + // do nothing. |
997 | } | 1022 | } |
998 | 1023 | ||
999 | @Override | 1024 | @Override |
1000 | public void enterRefineLeafListStatements(GeneratedYangParser.RefineLeafListStatementsContext ctx) { | 1025 | public void enterRefineLeafListStatements(GeneratedYangParser.RefineLeafListStatementsContext ctx) { |
1001 | - // TODO: implement the method. | 1026 | + // do nothing. |
1002 | } | 1027 | } |
1003 | 1028 | ||
1004 | @Override | 1029 | @Override |
1005 | public void exitRefineLeafListStatements(GeneratedYangParser.RefineLeafListStatementsContext ctx) { | 1030 | public void exitRefineLeafListStatements(GeneratedYangParser.RefineLeafListStatementsContext ctx) { |
1006 | - // TODO: implement the method. | 1031 | + // do nothing. |
1007 | } | 1032 | } |
1008 | 1033 | ||
1009 | @Override | 1034 | @Override |
1010 | public void enterRefineListStatements(GeneratedYangParser.RefineListStatementsContext ctx) { | 1035 | public void enterRefineListStatements(GeneratedYangParser.RefineListStatementsContext ctx) { |
1011 | - // TODO: implement the method. | 1036 | + // do nothing. |
1012 | } | 1037 | } |
1013 | 1038 | ||
1014 | @Override | 1039 | @Override |
1015 | public void exitRefineListStatements(GeneratedYangParser.RefineListStatementsContext ctx) { | 1040 | public void exitRefineListStatements(GeneratedYangParser.RefineListStatementsContext ctx) { |
1016 | - // TODO: implement the method. | 1041 | + // do nothing. |
1017 | } | 1042 | } |
1018 | 1043 | ||
1019 | @Override | 1044 | @Override |
1020 | public void enterRefineChoiceStatements(GeneratedYangParser.RefineChoiceStatementsContext ctx) { | 1045 | public void enterRefineChoiceStatements(GeneratedYangParser.RefineChoiceStatementsContext ctx) { |
1021 | - // TODO: implement the method. | 1046 | + // do nothing. |
1022 | } | 1047 | } |
1023 | 1048 | ||
1024 | @Override | 1049 | @Override |
1025 | public void exitRefineChoiceStatements(GeneratedYangParser.RefineChoiceStatementsContext ctx) { | 1050 | public void exitRefineChoiceStatements(GeneratedYangParser.RefineChoiceStatementsContext ctx) { |
1026 | - // TODO: implement the method. | 1051 | + // do nothing. |
1027 | } | 1052 | } |
1028 | 1053 | ||
1029 | @Override | 1054 | @Override |
1030 | public void enterRefineCaseStatements(GeneratedYangParser.RefineCaseStatementsContext ctx) { | 1055 | public void enterRefineCaseStatements(GeneratedYangParser.RefineCaseStatementsContext ctx) { |
1031 | - // TODO: implement the method. | 1056 | + // do nothing. |
1032 | } | 1057 | } |
1033 | 1058 | ||
1034 | @Override | 1059 | @Override |
1035 | public void exitRefineCaseStatements(GeneratedYangParser.RefineCaseStatementsContext ctx) { | 1060 | public void exitRefineCaseStatements(GeneratedYangParser.RefineCaseStatementsContext ctx) { |
1036 | - // TODO: implement the method. | 1061 | + // do nothing. |
1037 | } | 1062 | } |
1038 | 1063 | ||
1039 | @Override | 1064 | @Override |
1040 | - public void enterUsesAugmentStatement(GeneratedYangParser.UsesAugmentStatementContext ctx) { | 1065 | + public void enterRefineAnyxmlStatements(GeneratedYangParser.RefineAnyxmlStatementsContext ctx) { |
1041 | - // TODO: implement the method. | 1066 | + // do nothing. |
1042 | } | 1067 | } |
1043 | 1068 | ||
1044 | @Override | 1069 | @Override |
1045 | - public void exitUsesAugmentStatement(GeneratedYangParser.UsesAugmentStatementContext ctx) { | 1070 | + public void exitRefineAnyxmlStatements(GeneratedYangParser.RefineAnyxmlStatementsContext ctx) { |
1046 | - // TODO: implement the method. | 1071 | + // do nothing. |
1047 | } | 1072 | } |
1048 | 1073 | ||
1049 | @Override | 1074 | @Override |
... | @@ -1058,12 +1083,12 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -1058,12 +1083,12 @@ public class TreeWalkListener implements GeneratedYangListener { |
1058 | 1083 | ||
1059 | @Override | 1084 | @Override |
1060 | public void enterWhenStatement(GeneratedYangParser.WhenStatementContext ctx) { | 1085 | public void enterWhenStatement(GeneratedYangParser.WhenStatementContext ctx) { |
1061 | - // TODO: implement the method. | 1086 | + // TODO: to be implemented |
1062 | } | 1087 | } |
1063 | 1088 | ||
1064 | @Override | 1089 | @Override |
1065 | public void exitWhenStatement(GeneratedYangParser.WhenStatementContext ctx) { | 1090 | public void exitWhenStatement(GeneratedYangParser.WhenStatementContext ctx) { |
1066 | - // TODO: implement the method. | 1091 | + // TODO: to be implemented |
1067 | } | 1092 | } |
1068 | 1093 | ||
1069 | @Override | 1094 | @Override |
... | @@ -1108,271 +1133,291 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -1108,271 +1133,291 @@ public class TreeWalkListener implements GeneratedYangListener { |
1108 | 1133 | ||
1109 | @Override | 1134 | @Override |
1110 | public void enterDeviationStatement(GeneratedYangParser.DeviationStatementContext ctx) { | 1135 | public void enterDeviationStatement(GeneratedYangParser.DeviationStatementContext ctx) { |
1111 | - // TODO: implement the method. | 1136 | + handleUnsupportedYangConstruct(YangConstructType.DEVIATION_DATA, ctx, UNSUPPORTED_YANG_CONSTRUCT); |
1112 | } | 1137 | } |
1113 | 1138 | ||
1114 | @Override | 1139 | @Override |
1115 | public void exitDeviationStatement(GeneratedYangParser.DeviationStatementContext ctx) { | 1140 | public void exitDeviationStatement(GeneratedYangParser.DeviationStatementContext ctx) { |
1116 | - // TODO: implement the method. | 1141 | + // do nothing. |
1117 | } | 1142 | } |
1118 | 1143 | ||
1119 | @Override | 1144 | @Override |
1120 | public void enterDeviateNotSupportedStatement(GeneratedYangParser.DeviateNotSupportedStatementContext ctx) { | 1145 | public void enterDeviateNotSupportedStatement(GeneratedYangParser.DeviateNotSupportedStatementContext ctx) { |
1121 | - // TODO: implement the method. | 1146 | + // do nothing. |
1122 | } | 1147 | } |
1123 | 1148 | ||
1124 | @Override | 1149 | @Override |
1125 | public void exitDeviateNotSupportedStatement(GeneratedYangParser.DeviateNotSupportedStatementContext ctx) { | 1150 | public void exitDeviateNotSupportedStatement(GeneratedYangParser.DeviateNotSupportedStatementContext ctx) { |
1126 | - // TODO: implement the method. | 1151 | + // do nothing. |
1127 | } | 1152 | } |
1128 | 1153 | ||
1129 | @Override | 1154 | @Override |
1130 | public void enterDeviateAddStatement(GeneratedYangParser.DeviateAddStatementContext ctx) { | 1155 | public void enterDeviateAddStatement(GeneratedYangParser.DeviateAddStatementContext ctx) { |
1131 | - // TODO: implement the method. | 1156 | + // do nothing. |
1132 | } | 1157 | } |
1133 | 1158 | ||
1134 | @Override | 1159 | @Override |
1135 | public void exitDeviateAddStatement(GeneratedYangParser.DeviateAddStatementContext ctx) { | 1160 | public void exitDeviateAddStatement(GeneratedYangParser.DeviateAddStatementContext ctx) { |
1136 | - // TODO: implement the method. | 1161 | + // do nothing. |
1137 | } | 1162 | } |
1138 | 1163 | ||
1139 | @Override | 1164 | @Override |
1140 | public void enterDeviateDeleteStatement(GeneratedYangParser.DeviateDeleteStatementContext ctx) { | 1165 | public void enterDeviateDeleteStatement(GeneratedYangParser.DeviateDeleteStatementContext ctx) { |
1141 | - // TODO: implement the method. | 1166 | + // do nothing. |
1142 | } | 1167 | } |
1143 | 1168 | ||
1144 | @Override | 1169 | @Override |
1145 | public void exitDeviateDeleteStatement(GeneratedYangParser.DeviateDeleteStatementContext ctx) { | 1170 | public void exitDeviateDeleteStatement(GeneratedYangParser.DeviateDeleteStatementContext ctx) { |
1146 | - // TODO: implement the method. | 1171 | + // do nothing. |
1147 | } | 1172 | } |
1148 | 1173 | ||
1149 | @Override | 1174 | @Override |
1150 | public void enterDeviateReplaceStatement(GeneratedYangParser.DeviateReplaceStatementContext ctx) { | 1175 | public void enterDeviateReplaceStatement(GeneratedYangParser.DeviateReplaceStatementContext ctx) { |
1151 | - // TODO: implement the method. | 1176 | + // do nothing. |
1152 | } | 1177 | } |
1153 | 1178 | ||
1154 | @Override | 1179 | @Override |
1155 | public void exitDeviateReplaceStatement(GeneratedYangParser.DeviateReplaceStatementContext ctx) { | 1180 | public void exitDeviateReplaceStatement(GeneratedYangParser.DeviateReplaceStatementContext ctx) { |
1156 | - // TODO: implement the method. | 1181 | + // do nothing. |
1157 | } | 1182 | } |
1158 | 1183 | ||
1159 | @Override | 1184 | @Override |
1160 | public void enterString(GeneratedYangParser.StringContext ctx) { | 1185 | public void enterString(GeneratedYangParser.StringContext ctx) { |
1161 | - // TODO: implement the method. | 1186 | + // do nothing. |
1162 | } | 1187 | } |
1163 | 1188 | ||
1164 | @Override | 1189 | @Override |
1165 | public void exitString(GeneratedYangParser.StringContext ctx) { | 1190 | public void exitString(GeneratedYangParser.StringContext ctx) { |
1166 | - // TODO: implement the method. | 1191 | + // do nothing. |
1167 | } | 1192 | } |
1168 | 1193 | ||
1169 | @Override | 1194 | @Override |
1170 | public void enterIdentifier(GeneratedYangParser.IdentifierContext ctx) { | 1195 | public void enterIdentifier(GeneratedYangParser.IdentifierContext ctx) { |
1171 | - // TODO: implement the method. | 1196 | + // do nothing. |
1172 | } | 1197 | } |
1173 | 1198 | ||
1174 | @Override | 1199 | @Override |
1175 | public void exitIdentifier(GeneratedYangParser.IdentifierContext ctx) { | 1200 | public void exitIdentifier(GeneratedYangParser.IdentifierContext ctx) { |
1176 | - // TODO: implement the method. | 1201 | + // do nothing. |
1177 | } | 1202 | } |
1178 | 1203 | ||
1179 | @Override | 1204 | @Override |
1180 | public void enterDateArgumentString(GeneratedYangParser.DateArgumentStringContext ctx) { | 1205 | public void enterDateArgumentString(GeneratedYangParser.DateArgumentStringContext ctx) { |
1181 | - // TODO: implement the method. | 1206 | + // do nothing. |
1182 | } | 1207 | } |
1183 | 1208 | ||
1184 | @Override | 1209 | @Override |
1185 | public void exitDateArgumentString(GeneratedYangParser.DateArgumentStringContext ctx) { | 1210 | public void exitDateArgumentString(GeneratedYangParser.DateArgumentStringContext ctx) { |
1186 | - // TODO: implement the method. | 1211 | + // do nothing. |
1187 | } | 1212 | } |
1188 | 1213 | ||
1189 | @Override | 1214 | @Override |
1190 | public void enterRange(GeneratedYangParser.RangeContext ctx) { | 1215 | public void enterRange(GeneratedYangParser.RangeContext ctx) { |
1191 | - // TODO: implement the method. | 1216 | + // do nothing. |
1192 | } | 1217 | } |
1193 | 1218 | ||
1194 | @Override | 1219 | @Override |
1195 | public void exitRange(GeneratedYangParser.RangeContext ctx) { | 1220 | public void exitRange(GeneratedYangParser.RangeContext ctx) { |
1196 | - // TODO: implement the method. | 1221 | + // do nothing. |
1197 | } | 1222 | } |
1198 | 1223 | ||
1199 | @Override | 1224 | @Override |
1200 | public void enterLength(GeneratedYangParser.LengthContext ctx) { | 1225 | public void enterLength(GeneratedYangParser.LengthContext ctx) { |
1201 | - // TODO: implement the method. | 1226 | + // do nothing. |
1202 | } | 1227 | } |
1203 | 1228 | ||
1204 | @Override | 1229 | @Override |
1205 | public void exitLength(GeneratedYangParser.LengthContext ctx) { | 1230 | public void exitLength(GeneratedYangParser.LengthContext ctx) { |
1206 | - // TODO: implement the method. | 1231 | + // do nothing. |
1207 | } | 1232 | } |
1208 | 1233 | ||
1209 | @Override | 1234 | @Override |
1210 | public void enterPath(GeneratedYangParser.PathContext ctx) { | 1235 | public void enterPath(GeneratedYangParser.PathContext ctx) { |
1211 | - // TODO: implement the method. | 1236 | + // do nothing. |
1212 | } | 1237 | } |
1213 | 1238 | ||
1214 | @Override | 1239 | @Override |
1215 | public void exitPath(GeneratedYangParser.PathContext ctx) { | 1240 | public void exitPath(GeneratedYangParser.PathContext ctx) { |
1216 | - // TODO: implement the method. | 1241 | + // do nothing. |
1217 | } | 1242 | } |
1218 | 1243 | ||
1219 | @Override | 1244 | @Override |
1220 | public void enterPosition(GeneratedYangParser.PositionContext ctx) { | 1245 | public void enterPosition(GeneratedYangParser.PositionContext ctx) { |
1221 | - // TODO: implement the method. | 1246 | + // do nothing. |
1222 | } | 1247 | } |
1223 | 1248 | ||
1224 | @Override | 1249 | @Override |
1225 | public void exitPosition(GeneratedYangParser.PositionContext ctx) { | 1250 | public void exitPosition(GeneratedYangParser.PositionContext ctx) { |
1226 | - // TODO: implement the method. | 1251 | + // do nothing. |
1227 | } | 1252 | } |
1228 | 1253 | ||
1229 | @Override | 1254 | @Override |
1230 | public void enterStatus(GeneratedYangParser.StatusContext ctx) { | 1255 | public void enterStatus(GeneratedYangParser.StatusContext ctx) { |
1231 | - // TODO: implement the method. | 1256 | + // do nothing. |
1232 | } | 1257 | } |
1233 | 1258 | ||
1234 | @Override | 1259 | @Override |
1235 | public void exitStatus(GeneratedYangParser.StatusContext ctx) { | 1260 | public void exitStatus(GeneratedYangParser.StatusContext ctx) { |
1236 | - // TODO: implement the method. | 1261 | + // do nothing. |
1237 | } | 1262 | } |
1238 | 1263 | ||
1239 | @Override | 1264 | @Override |
1240 | public void enterConfig(GeneratedYangParser.ConfigContext ctx) { | 1265 | public void enterConfig(GeneratedYangParser.ConfigContext ctx) { |
1241 | - // TODO: implement the method. | 1266 | + // do nothing. |
1242 | } | 1267 | } |
1243 | 1268 | ||
1244 | @Override | 1269 | @Override |
1245 | public void exitConfig(GeneratedYangParser.ConfigContext ctx) { | 1270 | public void exitConfig(GeneratedYangParser.ConfigContext ctx) { |
1246 | - // TODO: implement the method. | 1271 | + // do nothing. |
1247 | } | 1272 | } |
1248 | 1273 | ||
1249 | @Override | 1274 | @Override |
1250 | public void enterMandatory(GeneratedYangParser.MandatoryContext ctx) { | 1275 | public void enterMandatory(GeneratedYangParser.MandatoryContext ctx) { |
1251 | - // TODO: implement the method. | 1276 | + // do nothing. |
1252 | } | 1277 | } |
1253 | 1278 | ||
1254 | @Override | 1279 | @Override |
1255 | public void exitMandatory(GeneratedYangParser.MandatoryContext ctx) { | 1280 | public void exitMandatory(GeneratedYangParser.MandatoryContext ctx) { |
1256 | - // TODO: implement the method. | 1281 | + // do nothing. |
1257 | } | 1282 | } |
1258 | 1283 | ||
1259 | @Override | 1284 | @Override |
1260 | public void enterOrderedBy(GeneratedYangParser.OrderedByContext ctx) { | 1285 | public void enterOrderedBy(GeneratedYangParser.OrderedByContext ctx) { |
1261 | - // TODO: implement the method. | 1286 | + // do nothing. |
1262 | } | 1287 | } |
1263 | 1288 | ||
1264 | @Override | 1289 | @Override |
1265 | public void exitOrderedBy(GeneratedYangParser.OrderedByContext ctx) { | 1290 | public void exitOrderedBy(GeneratedYangParser.OrderedByContext ctx) { |
1266 | - // TODO: implement the method. | 1291 | + // do nothing. |
1267 | } | 1292 | } |
1268 | 1293 | ||
1269 | @Override | 1294 | @Override |
1270 | public void enterMinValue(GeneratedYangParser.MinValueContext ctx) { | 1295 | public void enterMinValue(GeneratedYangParser.MinValueContext ctx) { |
1271 | - // TODO: implement the method. | 1296 | + // do nothing. |
1272 | } | 1297 | } |
1273 | 1298 | ||
1274 | @Override | 1299 | @Override |
1275 | public void exitMinValue(GeneratedYangParser.MinValueContext ctx) { | 1300 | public void exitMinValue(GeneratedYangParser.MinValueContext ctx) { |
1276 | - // TODO: implement the method. | 1301 | + // do nothing. |
1277 | } | 1302 | } |
1278 | 1303 | ||
1279 | @Override | 1304 | @Override |
1280 | public void enterMaxValue(GeneratedYangParser.MaxValueContext ctx) { | 1305 | public void enterMaxValue(GeneratedYangParser.MaxValueContext ctx) { |
1281 | - // TODO: implement the method. | 1306 | + // do nothing. |
1282 | } | 1307 | } |
1283 | 1308 | ||
1284 | @Override | 1309 | @Override |
1285 | public void exitMaxValue(GeneratedYangParser.MaxValueContext ctx) { | 1310 | public void exitMaxValue(GeneratedYangParser.MaxValueContext ctx) { |
1286 | - // TODO: implement the method. | 1311 | + // do nothing. |
1287 | } | 1312 | } |
1288 | 1313 | ||
1289 | @Override | 1314 | @Override |
1290 | public void enterKey(GeneratedYangParser.KeyContext ctx) { | 1315 | public void enterKey(GeneratedYangParser.KeyContext ctx) { |
1291 | - // TODO: implement the method. | 1316 | + // do nothing. |
1292 | } | 1317 | } |
1293 | 1318 | ||
1294 | @Override | 1319 | @Override |
1295 | public void exitKey(GeneratedYangParser.KeyContext ctx) { | 1320 | public void exitKey(GeneratedYangParser.KeyContext ctx) { |
1296 | - // TODO: implement the method. | 1321 | + // do nothing. |
1297 | } | 1322 | } |
1298 | 1323 | ||
1299 | @Override | 1324 | @Override |
1300 | public void enterUnique(GeneratedYangParser.UniqueContext ctx) { | 1325 | public void enterUnique(GeneratedYangParser.UniqueContext ctx) { |
1301 | - // TODO: implement the method. | 1326 | + // do nothing. |
1302 | } | 1327 | } |
1303 | 1328 | ||
1304 | @Override | 1329 | @Override |
1305 | public void exitUnique(GeneratedYangParser.UniqueContext ctx) { | 1330 | public void exitUnique(GeneratedYangParser.UniqueContext ctx) { |
1306 | - // TODO: implement the method. | 1331 | + // do nothing. |
1307 | } | 1332 | } |
1308 | 1333 | ||
1309 | @Override | 1334 | @Override |
1310 | public void enterRefine(GeneratedYangParser.RefineContext ctx) { | 1335 | public void enterRefine(GeneratedYangParser.RefineContext ctx) { |
1311 | - // TODO: implement the method. | 1336 | + // do nothing. |
1312 | } | 1337 | } |
1313 | 1338 | ||
1314 | @Override | 1339 | @Override |
1315 | public void exitRefine(GeneratedYangParser.RefineContext ctx) { | 1340 | public void exitRefine(GeneratedYangParser.RefineContext ctx) { |
1316 | - // TODO: implement the method. | 1341 | + // do nothing. |
1317 | } | 1342 | } |
1318 | 1343 | ||
1319 | @Override | 1344 | @Override |
1320 | public void enterAugment(GeneratedYangParser.AugmentContext ctx) { | 1345 | public void enterAugment(GeneratedYangParser.AugmentContext ctx) { |
1321 | - // TODO: implement the method. | 1346 | + // do nothing. |
1322 | } | 1347 | } |
1323 | 1348 | ||
1324 | @Override | 1349 | @Override |
1325 | public void exitAugment(GeneratedYangParser.AugmentContext ctx) { | 1350 | public void exitAugment(GeneratedYangParser.AugmentContext ctx) { |
1326 | - // TODO: implement the method. | 1351 | + // do nothing. |
1327 | } | 1352 | } |
1328 | 1353 | ||
1329 | @Override | 1354 | @Override |
1330 | public void enterDeviation(GeneratedYangParser.DeviationContext ctx) { | 1355 | public void enterDeviation(GeneratedYangParser.DeviationContext ctx) { |
1331 | - // TODO: implement the method. | 1356 | + // do nothing. |
1332 | } | 1357 | } |
1333 | 1358 | ||
1334 | @Override | 1359 | @Override |
1335 | public void exitDeviation(GeneratedYangParser.DeviationContext ctx) { | 1360 | public void exitDeviation(GeneratedYangParser.DeviationContext ctx) { |
1336 | - // TODO: implement the method. | 1361 | + // do nothing. |
1337 | } | 1362 | } |
1338 | 1363 | ||
1339 | @Override | 1364 | @Override |
1340 | public void enterYangConstruct(GeneratedYangParser.YangConstructContext ctx) { | 1365 | public void enterYangConstruct(GeneratedYangParser.YangConstructContext ctx) { |
1341 | - // TODO: implement the method. | 1366 | + // do nothing. |
1342 | } | 1367 | } |
1343 | 1368 | ||
1344 | @Override | 1369 | @Override |
1345 | public void exitYangConstruct(GeneratedYangParser.YangConstructContext ctx) { | 1370 | public void exitYangConstruct(GeneratedYangParser.YangConstructContext ctx) { |
1346 | - // TODO: implement the method. | 1371 | + // do nothing. |
1347 | } | 1372 | } |
1348 | 1373 | ||
1349 | @Override | 1374 | @Override |
1350 | public void enterVersion(GeneratedYangParser.VersionContext ctx) { | 1375 | public void enterVersion(GeneratedYangParser.VersionContext ctx) { |
1351 | - // TODO: implement the method. | 1376 | + // do nothing. |
1352 | } | 1377 | } |
1353 | 1378 | ||
1354 | @Override | 1379 | @Override |
1355 | public void exitVersion(GeneratedYangParser.VersionContext ctx) { | 1380 | public void exitVersion(GeneratedYangParser.VersionContext ctx) { |
1381 | + // do nothing. | ||
1382 | + } | ||
1383 | + | ||
1384 | + @Override | ||
1385 | + public void enterValue(GeneratedYangParser.ValueContext ctx) { | ||
1386 | + // do nothing. | ||
1387 | + } | ||
1388 | + | ||
1389 | + @Override | ||
1390 | + public void exitValue(GeneratedYangParser.ValueContext ctx) { | ||
1391 | + // do nothing. | ||
1392 | + } | ||
1393 | + | ||
1394 | + @Override | ||
1395 | + public void enterFraction(GeneratedYangParser.FractionContext ctx) { | ||
1356 | // TODO: implement the method. | 1396 | // TODO: implement the method. |
1357 | } | 1397 | } |
1358 | 1398 | ||
1359 | @Override | 1399 | @Override |
1360 | - public void visitTerminal(TerminalNode terminalNode) { | 1400 | + public void exitFraction(GeneratedYangParser.FractionContext ctx) { |
1361 | // TODO: implement the method. | 1401 | // TODO: implement the method. |
1362 | } | 1402 | } |
1363 | 1403 | ||
1364 | @Override | 1404 | @Override |
1405 | + public void visitTerminal(TerminalNode terminalNode) { | ||
1406 | + // do nothing. | ||
1407 | + } | ||
1408 | + | ||
1409 | + @Override | ||
1365 | public void visitErrorNode(ErrorNode errorNode) { | 1410 | public void visitErrorNode(ErrorNode errorNode) { |
1366 | - // TODO: implement the method. | 1411 | + // do nothing. |
1367 | } | 1412 | } |
1368 | 1413 | ||
1369 | @Override | 1414 | @Override |
1370 | public void enterEveryRule(ParserRuleContext parserRuleContext) { | 1415 | public void enterEveryRule(ParserRuleContext parserRuleContext) { |
1371 | - // TODO: implement the method. | 1416 | + // do nothing. |
1372 | } | 1417 | } |
1373 | 1418 | ||
1374 | @Override | 1419 | @Override |
1375 | public void exitEveryRule(ParserRuleContext parserRuleContext) { | 1420 | public void exitEveryRule(ParserRuleContext parserRuleContext) { |
1376 | - // TODO: implement the method. | 1421 | + // do nothing. |
1377 | } | 1422 | } |
1378 | } | 1423 | } | ... | ... |
utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ContainerListener.java
... | @@ -26,6 +26,7 @@ import org.onosproject.yangutils.datamodel.YangModule; | ... | @@ -26,6 +26,7 @@ import org.onosproject.yangutils.datamodel.YangModule; |
26 | import org.onosproject.yangutils.datamodel.YangNode; | 26 | import org.onosproject.yangutils.datamodel.YangNode; |
27 | import org.onosproject.yangutils.datamodel.YangNotification; | 27 | import org.onosproject.yangutils.datamodel.YangNotification; |
28 | import org.onosproject.yangutils.datamodel.YangOutput; | 28 | import org.onosproject.yangutils.datamodel.YangOutput; |
29 | +import org.onosproject.yangutils.datamodel.YangSubModule; | ||
29 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 30 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; |
30 | import org.onosproject.yangutils.parser.Parsable; | 31 | import org.onosproject.yangutils.parser.Parsable; |
31 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; | 32 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; |
... | @@ -133,12 +134,11 @@ public final class ContainerListener { | ... | @@ -133,12 +134,11 @@ public final class ContainerListener { |
133 | } | 134 | } |
134 | 135 | ||
135 | Parsable curData = listener.getParsedDataStack().peek(); | 136 | Parsable curData = listener.getParsedDataStack().peek(); |
136 | - if (curData instanceof YangModule || curData instanceof YangContainer | 137 | + if (curData instanceof YangModule || curData instanceof YangSubModule |
137 | - || curData instanceof YangList || curData instanceof YangCase | 138 | + || curData instanceof YangContainer || curData instanceof YangList |
138 | - || curData instanceof YangNotification | 139 | + || curData instanceof YangCase || curData instanceof YangNotification |
139 | || curData instanceof YangInput || curData instanceof YangOutput | 140 | || curData instanceof YangInput || curData instanceof YangOutput |
140 | - || curData instanceof YangAugment | 141 | + || curData instanceof YangAugment || curData instanceof YangGrouping) { |
141 | - || curData instanceof YangGrouping) { | ||
142 | YangNode curNode = (YangNode) curData; | 142 | YangNode curNode = (YangNode) curData; |
143 | try { | 143 | try { |
144 | curNode.addChild(container); | 144 | curNode.addChild(container); | ... | ... |
... | @@ -39,6 +39,8 @@ package org.onosproject.yangutils.parser.impl.listeners; | ... | @@ -39,6 +39,8 @@ package org.onosproject.yangutils.parser.impl.listeners; |
39 | * defaultStatement : DEFAULT_KEYWORD string STMTEND; | 39 | * defaultStatement : DEFAULT_KEYWORD string STMTEND; |
40 | */ | 40 | */ |
41 | 41 | ||
42 | +import org.onosproject.yangutils.datamodel.YangChoice; | ||
43 | +import org.onosproject.yangutils.datamodel.YangLeaf; | ||
42 | import org.onosproject.yangutils.datamodel.YangTypeDef; | 44 | import org.onosproject.yangutils.datamodel.YangTypeDef; |
43 | import org.onosproject.yangutils.parser.Parsable; | 45 | import org.onosproject.yangutils.parser.Parsable; |
44 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; | 46 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; |
... | @@ -83,6 +85,16 @@ public final class DefaultListener { | ... | @@ -83,6 +85,16 @@ public final class DefaultListener { |
83 | typeDef.setDefaultValueInString(ctx.string().getText()); | 85 | typeDef.setDefaultValueInString(ctx.string().getText()); |
84 | break; | 86 | break; |
85 | } | 87 | } |
88 | + case LEAF_DATA: { | ||
89 | + YangLeaf leaf = (YangLeaf) tmpNode; | ||
90 | + leaf.setDefaultValueInString(ctx.string().getText()); | ||
91 | + break; | ||
92 | + } | ||
93 | + case CHOICE_DATA: { | ||
94 | + YangChoice choice = (YangChoice) tmpNode; | ||
95 | + choice.setDefaultValueInString(ctx.string().getText()); | ||
96 | + break; | ||
97 | + } | ||
86 | default: | 98 | default: |
87 | throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, | 99 | throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, |
88 | DEFAULT_DATA, ctx.string().getText(), ENTRY)); | 100 | DEFAULT_DATA, ctx.string().getText(), ENTRY)); | ... | ... |
... | @@ -146,7 +146,14 @@ public final class EnumListener { | ... | @@ -146,7 +146,14 @@ public final class EnumListener { |
146 | boolean isValuePresent = false; | 146 | boolean isValuePresent = false; |
147 | 147 | ||
148 | for (YangEnum curEnum : yangEnumeration.getEnumSet()) { | 148 | for (YangEnum curEnum : yangEnumeration.getEnumSet()) { |
149 | - if (maxValue <= curEnum.getValue()) { | 149 | + if (curEnum.getValue() == Integer.MAX_VALUE) { |
150 | + ParserException parserException = new ParserException("YANG file error : " | ||
151 | + + "An enum value MUST be specified for enum substatements following the one" | ||
152 | + + "with the current highest value"); | ||
153 | + parserException.setLine(ctx.getStart().getLine()); | ||
154 | + parserException.setCharPosition(ctx.getStart().getCharPositionInLine()); | ||
155 | + throw parserException; | ||
156 | + } else if (maxValue <= curEnum.getValue()) { | ||
150 | maxValue = curEnum.getValue(); | 157 | maxValue = curEnum.getValue(); |
151 | isValuePresent = true; | 158 | isValuePresent = true; |
152 | } | 159 | } |
... | @@ -161,8 +168,8 @@ public final class EnumListener { | ... | @@ -161,8 +168,8 @@ public final class EnumListener { |
161 | } catch (DataModelException e) { | 168 | } catch (DataModelException e) { |
162 | ParserException parserException = new ParserException(constructExtendedListenerErrorMessage( | 169 | ParserException parserException = new ParserException(constructExtendedListenerErrorMessage( |
163 | DUPLICATE_ENTRY, ENUM_DATA, ctx.string().getText(), EXIT, e.getMessage())); | 170 | DUPLICATE_ENTRY, ENUM_DATA, ctx.string().getText(), EXIT, e.getMessage())); |
164 | - parserException.setLine(ctx.string().STRING(0).getSymbol().getLine()); | 171 | + parserException.setLine(ctx.getStart().getLine()); |
165 | - parserException.setCharPosition(ctx.string().STRING(0).getSymbol().getCharPositionInLine()); | 172 | + parserException.setCharPosition(ctx.getStart().getCharPositionInLine()); |
166 | throw parserException; | 173 | throw parserException; |
167 | } | 174 | } |
168 | break; | 175 | break; |
... | @@ -173,8 +180,7 @@ public final class EnumListener { | ... | @@ -173,8 +180,7 @@ public final class EnumListener { |
173 | } | 180 | } |
174 | } else { | 181 | } else { |
175 | throw new ParserException( | 182 | throw new ParserException( |
176 | - constructListenerErrorMessage(MISSING_CURRENT_HOLDER, ENUM_DATA, ctx.string().getText(), | 183 | + constructListenerErrorMessage(MISSING_CURRENT_HOLDER, ENUM_DATA, ctx.string().getText(), EXIT)); |
177 | - EXIT)); | ||
178 | } | 184 | } |
179 | } | 185 | } |
180 | } | 186 | } | ... | ... |
... | @@ -29,8 +29,10 @@ import org.onosproject.yangutils.utils.YangConstructType; | ... | @@ -29,8 +29,10 @@ import org.onosproject.yangutils.utils.YangConstructType; |
29 | 29 | ||
30 | import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED; | 30 | import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED; |
31 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; | 31 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; |
32 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT; | ||
32 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage; | 33 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage; |
33 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER; | 34 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER; |
35 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER; | ||
34 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER; | 36 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER; |
35 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty; | 37 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty; |
36 | import static org.onosproject.yangutils.utils.RestrictionResolver.processLengthRestriction; | 38 | import static org.onosproject.yangutils.utils.RestrictionResolver.processLengthRestriction; |
... | @@ -86,7 +88,7 @@ public final class LengthRestrictionListener { | ... | @@ -86,7 +88,7 @@ public final class LengthRestrictionListener { |
86 | Parsable tmpData = listener.getParsedDataStack().peek(); | 88 | Parsable tmpData = listener.getParsedDataStack().peek(); |
87 | if (tmpData.getYangConstructType() == TYPE_DATA) { | 89 | if (tmpData.getYangConstructType() == TYPE_DATA) { |
88 | YangType type = (YangType) tmpData; | 90 | YangType type = (YangType) tmpData; |
89 | - setLengthRestriction(type, ctx); | 91 | + setLengthRestriction(listener, type, ctx); |
90 | } else { | 92 | } else { |
91 | throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LENGTH_DATA, | 93 | throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LENGTH_DATA, |
92 | ctx.length().getText(), ENTRY)); | 94 | ctx.length().getText(), ENTRY)); |
... | @@ -96,10 +98,11 @@ public final class LengthRestrictionListener { | ... | @@ -96,10 +98,11 @@ public final class LengthRestrictionListener { |
96 | /** | 98 | /** |
97 | * Sets the length restriction to type. | 99 | * Sets the length restriction to type. |
98 | * | 100 | * |
101 | + * @param listener listener's object | ||
99 | * @param type Yang type for which length restriction to be set | 102 | * @param type Yang type for which length restriction to be set |
100 | * @param ctx context object of the grammar rule | 103 | * @param ctx context object of the grammar rule |
101 | */ | 104 | */ |
102 | - private static void setLengthRestriction(YangType type, | 105 | + private static void setLengthRestriction(TreeWalkListener listener, YangType type, |
103 | GeneratedYangParser.LengthStatementContext ctx) { | 106 | GeneratedYangParser.LengthStatementContext ctx) { |
104 | 107 | ||
105 | if (type.getDataType() == DERIVED) { | 108 | if (type.getDataType() == DERIVED) { |
... | @@ -132,5 +135,31 @@ public final class LengthRestrictionListener { | ... | @@ -132,5 +135,31 @@ public final class LengthRestrictionListener { |
132 | } | 135 | } |
133 | 136 | ||
134 | stringRestriction.setLengthRestriction(lengthRestriction); | 137 | stringRestriction.setLengthRestriction(lengthRestriction); |
138 | + listener.getParsedDataStack().push(lengthRestriction); | ||
139 | + } | ||
140 | + | ||
141 | + /** | ||
142 | + * Performs validation and updates the data model tree. | ||
143 | + * It is called when parser exits from grammar rule (length). | ||
144 | + * | ||
145 | + * @param listener listener's object | ||
146 | + * @param ctx context object of the grammar rule | ||
147 | + */ | ||
148 | + public static void processLengthRestrictionExit(TreeWalkListener listener, | ||
149 | + GeneratedYangParser.LengthStatementContext ctx) { | ||
150 | + | ||
151 | + // Check for stack to be non empty. | ||
152 | + checkStackIsNotEmpty(listener, MISSING_HOLDER, LENGTH_DATA, ctx.length().getText(), EXIT); | ||
153 | + | ||
154 | + Parsable tmpData = listener.getParsedDataStack().peek(); | ||
155 | + if (tmpData instanceof YangRangeRestriction) { | ||
156 | + listener.getParsedDataStack().pop(); | ||
157 | + } else if (tmpData instanceof YangType | ||
158 | + && ((YangType) tmpData).getDataType() == DERIVED) { | ||
159 | + // TODO : need to handle in linker | ||
160 | + } else { | ||
161 | + throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, LENGTH_DATA, | ||
162 | + ctx.length().getText(), EXIT)); | ||
163 | + } | ||
135 | } | 164 | } |
136 | } | 165 | } | ... | ... |
... | @@ -26,6 +26,7 @@ import org.onosproject.yangutils.datamodel.YangModule; | ... | @@ -26,6 +26,7 @@ import org.onosproject.yangutils.datamodel.YangModule; |
26 | import org.onosproject.yangutils.datamodel.YangNode; | 26 | import org.onosproject.yangutils.datamodel.YangNode; |
27 | import org.onosproject.yangutils.datamodel.YangNotification; | 27 | import org.onosproject.yangutils.datamodel.YangNotification; |
28 | import org.onosproject.yangutils.datamodel.YangOutput; | 28 | import org.onosproject.yangutils.datamodel.YangOutput; |
29 | +import org.onosproject.yangutils.datamodel.YangSubModule; | ||
29 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 30 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; |
30 | import org.onosproject.yangutils.parser.Parsable; | 31 | import org.onosproject.yangutils.parser.Parsable; |
31 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; | 32 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; |
... | @@ -141,7 +142,8 @@ public final class ListListener { | ... | @@ -141,7 +142,8 @@ public final class ListListener { |
141 | if (curData instanceof YangModule || curData instanceof YangContainer | 142 | if (curData instanceof YangModule || curData instanceof YangContainer |
142 | || curData instanceof YangList || curData instanceof YangCase | 143 | || curData instanceof YangList || curData instanceof YangCase |
143 | || curData instanceof YangNotification || curData instanceof YangInput | 144 | || curData instanceof YangNotification || curData instanceof YangInput |
144 | - || curData instanceof YangOutput || curData instanceof YangAugment || curData instanceof YangGrouping) { | 145 | + || curData instanceof YangOutput || curData instanceof YangAugment |
146 | + || curData instanceof YangGrouping || curData instanceof YangSubModule) { | ||
145 | curNode = (YangNode) curData; | 147 | curNode = (YangNode) curData; |
146 | try { | 148 | try { |
147 | curNode.addChild(yangList); | 149 | curNode.addChild(yangList); | ... | ... |
... | @@ -27,9 +27,12 @@ import org.onosproject.yangutils.parser.exceptions.ParserException; | ... | @@ -27,9 +27,12 @@ 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.utils.YangConstructType; | 28 | import org.onosproject.yangutils.utils.YangConstructType; |
29 | 29 | ||
30 | +import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED; | ||
30 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; | 31 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; |
32 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT; | ||
31 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage; | 33 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage; |
32 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER; | 34 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER; |
35 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER; | ||
33 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER; | 36 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER; |
34 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty; | 37 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty; |
35 | import static org.onosproject.yangutils.utils.YangConstructType.PATTERN_DATA; | 38 | import static org.onosproject.yangutils.utils.YangConstructType.PATTERN_DATA; |
... | @@ -84,7 +87,7 @@ public final class PatternRestrictionListener { | ... | @@ -84,7 +87,7 @@ public final class PatternRestrictionListener { |
84 | Parsable tmpData = listener.getParsedDataStack().peek(); | 87 | Parsable tmpData = listener.getParsedDataStack().peek(); |
85 | if (tmpData.getYangConstructType() == TYPE_DATA) { | 88 | if (tmpData.getYangConstructType() == TYPE_DATA) { |
86 | YangType type = (YangType) tmpData; | 89 | YangType type = (YangType) tmpData; |
87 | - setPatternRestriction(type, ctx); | 90 | + setPatternRestriction(listener, type, ctx); |
88 | } else { | 91 | } else { |
89 | throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, PATTERN_DATA, | 92 | throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, PATTERN_DATA, |
90 | ctx.string().getText(), ENTRY)); | 93 | ctx.string().getText(), ENTRY)); |
... | @@ -94,10 +97,11 @@ public final class PatternRestrictionListener { | ... | @@ -94,10 +97,11 @@ public final class PatternRestrictionListener { |
94 | /** | 97 | /** |
95 | * Sets the pattern restriction to type. | 98 | * Sets the pattern restriction to type. |
96 | * | 99 | * |
100 | + * @param listener listener's object | ||
97 | * @param type Yang type for which pattern restriction to be set | 101 | * @param type Yang type for which pattern restriction to be set |
98 | * @param ctx context object of the grammar rule | 102 | * @param ctx context object of the grammar rule |
99 | */ | 103 | */ |
100 | - private static void setPatternRestriction(YangType type, | 104 | + private static void setPatternRestriction(TreeWalkListener listener, YangType type, |
101 | GeneratedYangParser.PatternStatementContext ctx) { | 105 | GeneratedYangParser.PatternStatementContext ctx) { |
102 | 106 | ||
103 | if (type.getDataType() != YangDataTypes.STRING && type.getDataType() != YangDataTypes.DERIVED) { | 107 | if (type.getDataType() != YangDataTypes.STRING && type.getDataType() != YangDataTypes.DERIVED) { |
... | @@ -121,6 +125,7 @@ public final class PatternRestrictionListener { | ... | @@ -121,6 +125,7 @@ public final class PatternRestrictionListener { |
121 | } else { | 125 | } else { |
122 | stringRestriction.addPattern(patternArgument); | 126 | stringRestriction.addPattern(patternArgument); |
123 | } | 127 | } |
128 | + listener.getParsedDataStack().push(stringRestriction); | ||
124 | } else { | 129 | } else { |
125 | YangPatternRestriction patternRestriction = (YangPatternRestriction) ((YangDerivedInfo<?>) type | 130 | YangPatternRestriction patternRestriction = (YangPatternRestriction) ((YangDerivedInfo<?>) type |
126 | .getDataTypeExtendedInfo()).getPatternRestriction(); | 131 | .getDataTypeExtendedInfo()).getPatternRestriction(); |
... | @@ -134,4 +139,29 @@ public final class PatternRestrictionListener { | ... | @@ -134,4 +139,29 @@ public final class PatternRestrictionListener { |
134 | } | 139 | } |
135 | } | 140 | } |
136 | } | 141 | } |
142 | + | ||
143 | + /** | ||
144 | + * Performs validation and updates the data model tree. | ||
145 | + * It is called when parser exits from grammar rule (pattern). | ||
146 | + * | ||
147 | + * @param listener listener's object | ||
148 | + * @param ctx context object of the grammar rule | ||
149 | + */ | ||
150 | + public static void processPatternRestrictionExit(TreeWalkListener listener, | ||
151 | + GeneratedYangParser.PatternStatementContext ctx) { | ||
152 | + | ||
153 | + // Check for stack to be non empty. | ||
154 | + checkStackIsNotEmpty(listener, MISSING_HOLDER, PATTERN_DATA, ctx.string().getText(), EXIT); | ||
155 | + | ||
156 | + Parsable tmpData = listener.getParsedDataStack().peek(); | ||
157 | + if (tmpData instanceof YangStringRestriction) { | ||
158 | + listener.getParsedDataStack().pop(); | ||
159 | + } else if (tmpData instanceof YangType | ||
160 | + && ((YangType) tmpData).getDataType() == DERIVED) { | ||
161 | + // TODO : need to handle in linker | ||
162 | + } else { | ||
163 | + throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, PATTERN_DATA, | ||
164 | + ctx.string().getText(), EXIT)); | ||
165 | + } | ||
166 | + } | ||
137 | } | 167 | } | ... | ... |
... | @@ -26,8 +26,10 @@ import org.onosproject.yangutils.parser.impl.TreeWalkListener; | ... | @@ -26,8 +26,10 @@ import org.onosproject.yangutils.parser.impl.TreeWalkListener; |
26 | 26 | ||
27 | import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED; | 27 | import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED; |
28 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; | 28 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; |
29 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT; | ||
29 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage; | 30 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage; |
30 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER; | 31 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER; |
32 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER; | ||
31 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER; | 33 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER; |
32 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty; | 34 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty; |
33 | import static org.onosproject.yangutils.utils.RestrictionResolver.isOfRangeRestrictedType; | 35 | import static org.onosproject.yangutils.utils.RestrictionResolver.isOfRangeRestrictedType; |
... | @@ -82,7 +84,7 @@ public final class RangeRestrictionListener { | ... | @@ -82,7 +84,7 @@ public final class RangeRestrictionListener { |
82 | Parsable tmpData = listener.getParsedDataStack().peek(); | 84 | Parsable tmpData = listener.getParsedDataStack().peek(); |
83 | if (tmpData.getYangConstructType() == TYPE_DATA) { | 85 | if (tmpData.getYangConstructType() == TYPE_DATA) { |
84 | YangType type = (YangType) tmpData; | 86 | YangType type = (YangType) tmpData; |
85 | - setRangeRestriction(type, ctx); | 87 | + setRangeRestriction(listener, type, ctx); |
86 | } else { | 88 | } else { |
87 | throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, RANGE_DATA, | 89 | throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, RANGE_DATA, |
88 | ctx.range().getText(), ENTRY)); | 90 | ctx.range().getText(), ENTRY)); |
... | @@ -92,10 +94,11 @@ public final class RangeRestrictionListener { | ... | @@ -92,10 +94,11 @@ public final class RangeRestrictionListener { |
92 | /** | 94 | /** |
93 | * Sets the range restriction to type. | 95 | * Sets the range restriction to type. |
94 | * | 96 | * |
97 | + * @param listener listener's object | ||
95 | * @param type YANG type for which range restriction to be added | 98 | * @param type YANG type for which range restriction to be added |
96 | * @param ctx context object of the grammar rule | 99 | * @param ctx context object of the grammar rule |
97 | */ | 100 | */ |
98 | - private static void setRangeRestriction(YangType type, | 101 | + private static void setRangeRestriction(TreeWalkListener listener, YangType type, |
99 | GeneratedYangParser.RangeStatementContext ctx) { | 102 | GeneratedYangParser.RangeStatementContext ctx) { |
100 | 103 | ||
101 | if (type.getDataType() == DERIVED) { | 104 | if (type.getDataType() == DERIVED) { |
... | @@ -122,5 +125,31 @@ public final class RangeRestrictionListener { | ... | @@ -122,5 +125,31 @@ public final class RangeRestrictionListener { |
122 | if (rangeRestriction != null) { | 125 | if (rangeRestriction != null) { |
123 | type.setDataTypeExtendedInfo(rangeRestriction); | 126 | type.setDataTypeExtendedInfo(rangeRestriction); |
124 | } | 127 | } |
128 | + listener.getParsedDataStack().push(rangeRestriction); | ||
129 | + } | ||
130 | + | ||
131 | + /** | ||
132 | + * Performs validation and updates the data model tree. | ||
133 | + * It is called when parser exits from grammar rule (range). | ||
134 | + * | ||
135 | + * @param listener listener's object | ||
136 | + * @param ctx context object of the grammar rule | ||
137 | + */ | ||
138 | + public static void processRangeRestrictionExit(TreeWalkListener listener, | ||
139 | + GeneratedYangParser.RangeStatementContext ctx) { | ||
140 | + | ||
141 | + // Check for stack to be non empty. | ||
142 | + checkStackIsNotEmpty(listener, MISSING_HOLDER, RANGE_DATA, ctx.range().getText(), EXIT); | ||
143 | + | ||
144 | + Parsable tmpData = listener.getParsedDataStack().peek(); | ||
145 | + if (tmpData instanceof YangRangeRestriction) { | ||
146 | + listener.getParsedDataStack().pop(); | ||
147 | + } else if (tmpData instanceof YangType | ||
148 | + && ((YangType) tmpData).getDataType() == DERIVED) { | ||
149 | + // TODO : need to handle in linker | ||
150 | + } else { | ||
151 | + throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, RANGE_DATA, | ||
152 | + ctx.range().getText(), EXIT)); | ||
153 | + } | ||
125 | } | 154 | } |
126 | } | 155 | } |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -38,6 +38,7 @@ import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMes | ... | @@ -38,6 +38,7 @@ import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMes |
38 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER; | 38 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER; |
39 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER; | 39 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER; |
40 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty; | 40 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty; |
41 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIntegerValue; | ||
41 | import static org.onosproject.yangutils.utils.YangConstructType.VALUE_DATA; | 42 | import static org.onosproject.yangutils.utils.YangConstructType.VALUE_DATA; |
42 | 43 | ||
43 | /** | 44 | /** |
... | @@ -62,25 +63,28 @@ public final class ValueListener { | ... | @@ -62,25 +63,28 @@ public final class ValueListener { |
62 | public static void processValueEntry(TreeWalkListener listener, GeneratedYangParser.ValueStatementContext ctx) { | 63 | public static void processValueEntry(TreeWalkListener listener, GeneratedYangParser.ValueStatementContext ctx) { |
63 | 64 | ||
64 | // Check for stack to be non empty. | 65 | // Check for stack to be non empty. |
65 | - checkStackIsNotEmpty(listener, MISSING_HOLDER, VALUE_DATA, ctx.INTEGER().getText(), ENTRY); | 66 | + checkStackIsNotEmpty(listener, MISSING_HOLDER, VALUE_DATA, ctx.value().getText(), ENTRY); |
67 | + | ||
68 | + // Validate value | ||
69 | + int value = getValidIntegerValue(ctx.value().getText(), VALUE_DATA, ctx); | ||
66 | 70 | ||
67 | // Obtain the node of the stack. | 71 | // Obtain the node of the stack. |
68 | Parsable tmpNode = listener.getParsedDataStack().peek(); | 72 | Parsable tmpNode = listener.getParsedDataStack().peek(); |
69 | switch (tmpNode.getYangConstructType()) { | 73 | switch (tmpNode.getYangConstructType()) { |
70 | case ENUM_DATA: { | 74 | case ENUM_DATA: { |
71 | YangEnum enumNode = (YangEnum) tmpNode; | 75 | YangEnum enumNode = (YangEnum) tmpNode; |
72 | - if (!isEnumValueValid(listener, ctx)) { | 76 | + if (!isEnumValueValid(listener, ctx, value)) { |
73 | ParserException parserException = new ParserException("Duplicate Value Entry"); | 77 | ParserException parserException = new ParserException("Duplicate Value Entry"); |
74 | - parserException.setLine(ctx.INTEGER().getSymbol().getLine()); | 78 | + parserException.setLine(ctx.getStart().getLine()); |
75 | - parserException.setCharPosition(ctx.INTEGER().getSymbol().getCharPositionInLine()); | 79 | + parserException.setCharPosition(ctx.getStart().getCharPositionInLine()); |
76 | throw parserException; | 80 | throw parserException; |
77 | } | 81 | } |
78 | - enumNode.setValue(Integer.valueOf(ctx.INTEGER().getText())); | 82 | + enumNode.setValue(value); |
79 | break; | 83 | break; |
80 | } | 84 | } |
81 | default: | 85 | default: |
82 | throw new ParserException( | 86 | throw new ParserException( |
83 | - constructListenerErrorMessage(INVALID_HOLDER, VALUE_DATA, ctx.INTEGER().getText(), ENTRY)); | 87 | + constructListenerErrorMessage(INVALID_HOLDER, VALUE_DATA, ctx.value().getText(), ENTRY)); |
84 | } | 88 | } |
85 | } | 89 | } |
86 | 90 | ||
... | @@ -89,20 +93,22 @@ public final class ValueListener { | ... | @@ -89,20 +93,22 @@ public final class ValueListener { |
89 | * | 93 | * |
90 | * @param listener Listener's object | 94 | * @param listener Listener's object |
91 | * @param ctx context object of the grammar rule | 95 | * @param ctx context object of the grammar rule |
96 | + * @param value enum value | ||
92 | * @return validation result | 97 | * @return validation result |
93 | */ | 98 | */ |
94 | - private static boolean isEnumValueValid(TreeWalkListener listener, GeneratedYangParser.ValueStatementContext ctx) { | 99 | + private static boolean isEnumValueValid(TreeWalkListener listener, GeneratedYangParser.ValueStatementContext ctx, |
100 | + int value) { | ||
95 | Parsable enumNode = listener.getParsedDataStack().pop(); | 101 | Parsable enumNode = listener.getParsedDataStack().pop(); |
96 | 102 | ||
97 | // Check for stack to be non empty. | 103 | // Check for stack to be non empty. |
98 | - checkStackIsNotEmpty(listener, MISSING_HOLDER, VALUE_DATA, ctx.INTEGER().getText(), ENTRY); | 104 | + checkStackIsNotEmpty(listener, MISSING_HOLDER, VALUE_DATA, ctx.value().getText(), ENTRY); |
99 | 105 | ||
100 | Parsable tmpNode = listener.getParsedDataStack().peek(); | 106 | Parsable tmpNode = listener.getParsedDataStack().peek(); |
101 | switch (tmpNode.getYangConstructType()) { | 107 | switch (tmpNode.getYangConstructType()) { |
102 | case ENUMERATION_DATA: { | 108 | case ENUMERATION_DATA: { |
103 | YangEnumeration yangEnumeration = (YangEnumeration) tmpNode; | 109 | YangEnumeration yangEnumeration = (YangEnumeration) tmpNode; |
104 | for (YangEnum curEnum : yangEnumeration.getEnumSet()) { | 110 | for (YangEnum curEnum : yangEnumeration.getEnumSet()) { |
105 | - if (Integer.valueOf(ctx.INTEGER().getText()) == curEnum.getValue()) { | 111 | + if (value == curEnum.getValue()) { |
106 | listener.getParsedDataStack().push(enumNode); | 112 | listener.getParsedDataStack().push(enumNode); |
107 | return false; | 113 | return false; |
108 | } | 114 | } |
... | @@ -113,7 +119,7 @@ public final class ValueListener { | ... | @@ -113,7 +119,7 @@ public final class ValueListener { |
113 | default: | 119 | default: |
114 | listener.getParsedDataStack().push(enumNode); | 120 | listener.getParsedDataStack().push(enumNode); |
115 | throw new ParserException( | 121 | throw new ParserException( |
116 | - constructListenerErrorMessage(INVALID_HOLDER, VALUE_DATA, ctx.INTEGER().getText(), ENTRY)); | 122 | + constructListenerErrorMessage(INVALID_HOLDER, VALUE_DATA, ctx.value().getText(), ENTRY)); |
117 | } | 123 | } |
118 | } | 124 | } |
119 | } | 125 | } | ... | ... |
... | @@ -29,6 +29,18 @@ import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; | ... | @@ -29,6 +29,18 @@ import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; |
29 | import org.onosproject.yangutils.parser.exceptions.ParserException; | 29 | import org.onosproject.yangutils.parser.exceptions.ParserException; |
30 | import org.onosproject.yangutils.utils.YangConstructType; | 30 | import org.onosproject.yangutils.utils.YangConstructType; |
31 | 31 | ||
32 | +import static org.onosproject.yangutils.utils.UtilConstants.ADD; | ||
33 | +import static org.onosproject.yangutils.utils.UtilConstants.SPACE; | ||
34 | +import static org.onosproject.yangutils.utils.UtilConstants.SLASH; | ||
35 | +import static org.onosproject.yangutils.utils.UtilConstants.COLON; | ||
36 | +import static org.onosproject.yangutils.utils.UtilConstants.CARET; | ||
37 | +import static org.onosproject.yangutils.utils.UtilConstants.QUOTES; | ||
38 | +import static org.onosproject.yangutils.utils.UtilConstants.HYPHEN; | ||
39 | +import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING; | ||
40 | +import static org.onosproject.yangutils.utils.UtilConstants.TRUE; | ||
41 | +import static org.onosproject.yangutils.utils.UtilConstants.FALSE; | ||
42 | +import static org.onosproject.yangutils.utils.UtilConstants.YANG_FILE_ERROR; | ||
43 | + | ||
32 | /** | 44 | /** |
33 | * Represents an utility for listener. | 45 | * Represents an utility for listener. |
34 | */ | 46 | */ |
... | @@ -37,18 +49,10 @@ public final class ListenerUtil { | ... | @@ -37,18 +49,10 @@ public final class ListenerUtil { |
37 | private static final Pattern IDENTIFIER_PATTERN = Pattern.compile("[a-zA-Z_][a-zA-Z0-9_.-]*"); | 49 | private static final Pattern IDENTIFIER_PATTERN = Pattern.compile("[a-zA-Z_][a-zA-Z0-9_.-]*"); |
38 | private static final String DATE_PATTERN = "[0-9]{4}-([0-9]{2}|[0-9])-([0-9]{2}|[0-9])"; | 50 | private static final String DATE_PATTERN = "[0-9]{4}-([0-9]{2}|[0-9])-([0-9]{2}|[0-9])"; |
39 | private static final String NON_NEGATIVE_INTEGER_PATTERN = "[0-9]+"; | 51 | private static final String NON_NEGATIVE_INTEGER_PATTERN = "[0-9]+"; |
40 | - private static final String PLUS = "+"; | 52 | + private static final Pattern INTEGER_PATTERN = Pattern.compile("[-][0-9]+|[0-9]+"); |
41 | private static final String ONE = "1"; | 53 | private static final String ONE = "1"; |
42 | - private static final String TRUE_KEYWORD = "true"; | ||
43 | - private static final String FALSE_KEYWORD = "false"; | ||
44 | private static final int IDENTIFIER_LENGTH = 64; | 54 | private static final int IDENTIFIER_LENGTH = 64; |
45 | private static final String DATE_FORMAT = "yyyy-MM-dd"; | 55 | private static final String DATE_FORMAT = "yyyy-MM-dd"; |
46 | - private static final String EMPTY_STRING = ""; | ||
47 | - private static final String HYPHEN = "-"; | ||
48 | - private static final String SLASH = "/"; | ||
49 | - private static final String SPACE = " "; | ||
50 | - private static final String COLON = ":"; | ||
51 | - private static final String CARET = "^"; | ||
52 | 56 | ||
53 | /** | 57 | /** |
54 | * Creates a new listener util. | 58 | * Creates a new listener util. |
... | @@ -65,7 +69,7 @@ public final class ListenerUtil { | ... | @@ -65,7 +69,7 @@ public final class ListenerUtil { |
65 | public static String removeQuotesAndHandleConcat(String yangStringData) { | 69 | public static String removeQuotesAndHandleConcat(String yangStringData) { |
66 | 70 | ||
67 | yangStringData = yangStringData.replace("\"", EMPTY_STRING); | 71 | yangStringData = yangStringData.replace("\"", EMPTY_STRING); |
68 | - String[] tmpData = yangStringData.split(Pattern.quote(PLUS)); | 72 | + String[] tmpData = yangStringData.split(Pattern.quote(ADD)); |
69 | StringBuilder builder = new StringBuilder(); | 73 | StringBuilder builder = new StringBuilder(); |
70 | for (String yangString : tmpData) { | 74 | for (String yangString : tmpData) { |
71 | builder.append(yangString); | 75 | builder.append(yangString); |
... | @@ -171,6 +175,41 @@ public final class ListenerUtil { | ... | @@ -171,6 +175,41 @@ public final class ListenerUtil { |
171 | } | 175 | } |
172 | 176 | ||
173 | /** | 177 | /** |
178 | + * Validates integer value. | ||
179 | + * | ||
180 | + * @param integerValue integer to be validated | ||
181 | + * @param yangConstruct yang construct for creating error message | ||
182 | + * @param ctx context object of the grammar rule | ||
183 | + * @return valid integer value | ||
184 | + */ | ||
185 | + public static int getValidIntegerValue(String integerValue, YangConstructType yangConstruct, | ||
186 | + ParserRuleContext ctx) { | ||
187 | + | ||
188 | + String value = removeQuotesAndHandleConcat(integerValue); | ||
189 | + if (!INTEGER_PATTERN.matcher(value).matches()) { | ||
190 | + ParserException parserException = new ParserException("YANG file error : " + | ||
191 | + YangConstructType.getYangConstructType(yangConstruct) + " value " + value + " is not " + | ||
192 | + "valid."); | ||
193 | + parserException.setLine(ctx.getStart().getLine()); | ||
194 | + parserException.setCharPosition(ctx.getStart().getCharPositionInLine()); | ||
195 | + throw parserException; | ||
196 | + } | ||
197 | + | ||
198 | + int valueInInteger; | ||
199 | + try { | ||
200 | + valueInInteger = Integer.parseInt(value); | ||
201 | + } catch (NumberFormatException e) { | ||
202 | + ParserException parserException = new ParserException("YANG file error : " + | ||
203 | + YangConstructType.getYangConstructType(yangConstruct) + " value " + value + " is not " + | ||
204 | + "valid."); | ||
205 | + parserException.setLine(ctx.getStart().getLine()); | ||
206 | + parserException.setCharPosition(ctx.getStart().getCharPositionInLine()); | ||
207 | + throw parserException; | ||
208 | + } | ||
209 | + return valueInInteger; | ||
210 | + } | ||
211 | + | ||
212 | + /** | ||
174 | * Validates boolean value. | 213 | * Validates boolean value. |
175 | * | 214 | * |
176 | * @param booleanValue value to be validated | 215 | * @param booleanValue value to be validated |
... | @@ -182,9 +221,9 @@ public final class ListenerUtil { | ... | @@ -182,9 +221,9 @@ public final class ListenerUtil { |
182 | ParserRuleContext ctx) { | 221 | ParserRuleContext ctx) { |
183 | 222 | ||
184 | String value = removeQuotesAndHandleConcat(booleanValue); | 223 | String value = removeQuotesAndHandleConcat(booleanValue); |
185 | - if (value.equals(TRUE_KEYWORD)) { | 224 | + if (value.equals(TRUE)) { |
186 | return true; | 225 | return true; |
187 | - } else if (value.equals(FALSE_KEYWORD)) { | 226 | + } else if (value.equals(FALSE)) { |
188 | return false; | 227 | return false; |
189 | } else { | 228 | } else { |
190 | ParserException parserException = new ParserException("YANG file error : " + | 229 | ParserException parserException = new ParserException("YANG file error : " + |
... | @@ -272,4 +311,21 @@ public final class ListenerUtil { | ... | @@ -272,4 +311,21 @@ public final class ListenerUtil { |
272 | } | 311 | } |
273 | return targetNodes; | 312 | return targetNodes; |
274 | } | 313 | } |
314 | + | ||
315 | + /** | ||
316 | + * Throws parser exception for unsupported YANG constructs. | ||
317 | + * | ||
318 | + * @param yangConstructType yang construct for creating error message | ||
319 | + * @param ctx yang construct's context to get the line number and character position | ||
320 | + * @param errorInfo error information | ||
321 | + */ | ||
322 | + public static void handleUnsupportedYangConstruct(YangConstructType yangConstructType, | ||
323 | + ParserRuleContext ctx, String errorInfo) { | ||
324 | + ParserException parserException = new ParserException(YANG_FILE_ERROR | ||
325 | + + QUOTES + YangConstructType.getYangConstructType(yangConstructType) + QUOTES | ||
326 | + + errorInfo); | ||
327 | + parserException.setLine(ctx.getStart().getLine()); | ||
328 | + parserException.setCharPosition(ctx.getStart().getCharPositionInLine()); | ||
329 | + throw parserException; | ||
330 | + } | ||
275 | } | 331 | } |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
1 | +/* | ||
2 | + * Copyright 2016-present 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.plugin.manager; | ||
18 | + | ||
19 | +import org.onosproject.yangutils.datamodel.YangNode; | ||
20 | + | ||
21 | +/** | ||
22 | + * Represents YANG file information. | ||
23 | + */ | ||
24 | +public class YangFileInfo { | ||
25 | + | ||
26 | + /** | ||
27 | + * YANG file name. | ||
28 | + */ | ||
29 | + private String yangFileName; | ||
30 | + | ||
31 | + /** | ||
32 | + * Data model node after parsing YANG file. | ||
33 | + */ | ||
34 | + private YangNode rootNode; | ||
35 | + | ||
36 | + /** | ||
37 | + * Returns data model node for YANG file. | ||
38 | + * | ||
39 | + * @return data model node for YANG file | ||
40 | + */ | ||
41 | + public YangNode getRootNode() { | ||
42 | + return rootNode; | ||
43 | + } | ||
44 | + | ||
45 | + /** | ||
46 | + * Sets data model node for YANG file. | ||
47 | + * | ||
48 | + * @param rootNode of the Yang file | ||
49 | + */ | ||
50 | + public void setRootNode(YangNode rootNode) { | ||
51 | + this.rootNode = rootNode; | ||
52 | + } | ||
53 | + | ||
54 | + /** | ||
55 | + * Returns YANG file name. | ||
56 | + * | ||
57 | + * @return yangFileName YANG file name | ||
58 | + */ | ||
59 | + public String getYangFileName() { | ||
60 | + return yangFileName; | ||
61 | + } | ||
62 | + | ||
63 | + /** | ||
64 | + * Sets YANG file name. | ||
65 | + * | ||
66 | + * @param yangFileName YANG file name | ||
67 | + */ | ||
68 | + public void setYangFileName(String yangFileName) { | ||
69 | + this.yangFileName = yangFileName; | ||
70 | + } | ||
71 | +} |
... | @@ -28,6 +28,8 @@ import org.apache.maven.plugins.annotations.Mojo; | ... | @@ -28,6 +28,8 @@ import org.apache.maven.plugins.annotations.Mojo; |
28 | import org.apache.maven.plugins.annotations.Parameter; | 28 | import org.apache.maven.plugins.annotations.Parameter; |
29 | import org.apache.maven.project.MavenProject; | 29 | import org.apache.maven.project.MavenProject; |
30 | import org.onosproject.yangutils.datamodel.YangNode; | 30 | import org.onosproject.yangutils.datamodel.YangNode; |
31 | +import org.onosproject.yangutils.datamodel.YangSubModule; | ||
32 | +import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | ||
31 | import org.onosproject.yangutils.parser.YangUtilsParser; | 33 | import org.onosproject.yangutils.parser.YangUtilsParser; |
32 | import org.onosproject.yangutils.parser.exceptions.ParserException; | 34 | import org.onosproject.yangutils.parser.exceptions.ParserException; |
33 | import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; | 35 | import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; |
... | @@ -49,6 +51,7 @@ import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.addToSource; | ... | @@ -49,6 +51,7 @@ import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.addToSource; |
49 | import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory; | 51 | import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory; |
50 | import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.copyYangFilesToTarget; | 52 | import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.copyYangFilesToTarget; |
51 | import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getDirectory; | 53 | import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getDirectory; |
54 | +import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.findBelongsToModuleNode; | ||
52 | 55 | ||
53 | /** | 56 | /** |
54 | * Represents ONOS YANG utility maven plugin. | 57 | * Represents ONOS YANG utility maven plugin. |
... | @@ -137,17 +140,22 @@ public class YangUtilManager extends AbstractMojo { | ... | @@ -137,17 +140,22 @@ public class YangUtilManager extends AbstractMojo { |
137 | conflictResolver.setReplacementForPeriod(replacementForPeriod); | 140 | conflictResolver.setReplacementForPeriod(replacementForPeriod); |
138 | conflictResolver.setReplacementForHyphen(replacementForHyphen); | 141 | conflictResolver.setReplacementForHyphen(replacementForHyphen); |
139 | conflictResolver.setReplacementForUnderscore(replacementForUnderscore); | 142 | conflictResolver.setReplacementForUnderscore(replacementForUnderscore); |
140 | - List<String> yangFiles = YangFileScanner.getYangFiles(searchDir); | 143 | + List<YangFileInfo> yangFileInfo = YangFileScanner.getYangFiles(searchDir); |
144 | + if (yangFileInfo == null || yangFileInfo.isEmpty()) { | ||
145 | + // no files to translate | ||
146 | + return; | ||
147 | + } | ||
141 | YangPluginConfig yangPlugin = new YangPluginConfig(); | 148 | YangPluginConfig yangPlugin = new YangPluginConfig(); |
142 | yangPlugin.setCodeGenDir(codeGenDir); | 149 | yangPlugin.setCodeGenDir(codeGenDir); |
143 | yangPlugin.setConflictResolver(conflictResolver); | 150 | yangPlugin.setConflictResolver(conflictResolver); |
144 | - Iterator<String> yangFileIterator = yangFiles.iterator(); | 151 | + |
152 | + Iterator<YangFileInfo> yangFileIterator = yangFileInfo.iterator(); | ||
145 | while (yangFileIterator.hasNext()) { | 153 | while (yangFileIterator.hasNext()) { |
146 | - String yangFile = yangFileIterator.next(); | 154 | + YangFileInfo yangFile = yangFileIterator.next(); |
147 | try { | 155 | try { |
148 | - YangNode yangNode = yangUtilsParser.getDataModel(yangFile); | 156 | + YangNode yangNode = yangUtilsParser.getDataModel(yangFile.getYangFileName()); |
157 | + yangFile.setRootNode(yangNode); | ||
149 | setRootNode(yangNode); | 158 | setRootNode(yangNode); |
150 | - generateJavaCode(yangNode, yangPlugin, yangFile); | ||
151 | } catch (ParserException e) { | 159 | } catch (ParserException e) { |
152 | String logInfo = "Error in file: " + e.getFileName(); | 160 | String logInfo = "Error in file: " + e.getFileName(); |
153 | if (e.getLineNumber() != 0) { | 161 | if (e.getLineNumber() != 0) { |
... | @@ -163,8 +171,12 @@ public class YangUtilManager extends AbstractMojo { | ... | @@ -163,8 +171,12 @@ public class YangUtilManager extends AbstractMojo { |
163 | } | 171 | } |
164 | } | 172 | } |
165 | 173 | ||
174 | + resolveLinkingForSubModule(yangFileInfo); | ||
175 | + | ||
176 | + translateToJava(yangFileInfo, yangPlugin); | ||
177 | + | ||
166 | addToSource(getDirectory(baseDir, genFilesDir) + DEFAULT_PKG, project, context); | 178 | addToSource(getDirectory(baseDir, genFilesDir) + DEFAULT_PKG, project, context); |
167 | - copyYangFilesToTarget(yangFiles, getDirectory(baseDir, outputDirectory), project); | 179 | + copyYangFilesToTarget(yangFileInfo, getDirectory(baseDir, outputDirectory), project); |
168 | } catch (Exception e) { | 180 | } catch (Exception e) { |
169 | String fileName = ""; | 181 | String fileName = ""; |
170 | if (e instanceof TranslatorException) { | 182 | if (e instanceof TranslatorException) { |
... | @@ -220,4 +232,40 @@ public class YangUtilManager extends AbstractMojo { | ... | @@ -220,4 +232,40 @@ public class YangUtilManager extends AbstractMojo { |
220 | this.rootNode = rootNode; | 232 | this.rootNode = rootNode; |
221 | } | 233 | } |
222 | 234 | ||
235 | + /** | ||
236 | + * Translates to java code corresponding to the YANG schema. | ||
237 | + * | ||
238 | + * @param yangFileInfo YANG file information | ||
239 | + * @param yangPlugin YANG plugin config | ||
240 | + * @throws IOException when fails to generate java code file the current | ||
241 | + * node | ||
242 | + */ | ||
243 | + public static void translateToJava(List<YangFileInfo> yangFileInfo, YangPluginConfig yangPlugin) | ||
244 | + throws IOException { | ||
245 | + Iterator<YangFileInfo> yangFileIterator = yangFileInfo.iterator(); | ||
246 | + while (yangFileIterator.hasNext()) { | ||
247 | + YangFileInfo yangFile = yangFileIterator.next(); | ||
248 | + generateJavaCode(yangFile.getRootNode(), yangPlugin, yangFile.getYangFileName()); | ||
249 | + } | ||
250 | + } | ||
251 | + | ||
252 | + /** | ||
253 | + * Resolves sub-module linking. | ||
254 | + * | ||
255 | + * @param yangFileInfo YANG file information | ||
256 | + * @throws DataModelException when belongs-to module node is not found | ||
257 | + */ | ||
258 | + public static void resolveLinkingForSubModule(List<YangFileInfo> yangFileInfo) throws DataModelException { | ||
259 | + Iterator<YangFileInfo> yangFileIterator = yangFileInfo.iterator(); | ||
260 | + while (yangFileIterator.hasNext()) { | ||
261 | + YangFileInfo yangFile = yangFileIterator.next(); | ||
262 | + YangNode yangNode = yangFile.getRootNode(); | ||
263 | + if (yangNode instanceof YangSubModule) { | ||
264 | + String belongsToModuleName = ((YangSubModule) yangNode).getBelongsTo() | ||
265 | + .getBelongsToModuleName(); | ||
266 | + YangNode moduleNode = findBelongsToModuleNode(yangFileInfo, belongsToModuleName); | ||
267 | + ((YangSubModule) yangNode).getBelongsTo().setModuleNode(moduleNode); | ||
268 | + } | ||
269 | + } | ||
270 | + } | ||
223 | } | 271 | } | ... | ... |
... | @@ -18,6 +18,7 @@ package org.onosproject.yangutils.translator.tojava.javamodel; | ... | @@ -18,6 +18,7 @@ package org.onosproject.yangutils.translator.tojava.javamodel; |
18 | import java.io.IOException; | 18 | import java.io.IOException; |
19 | 19 | ||
20 | import org.onosproject.yangutils.datamodel.YangBelongsTo; | 20 | import org.onosproject.yangutils.datamodel.YangBelongsTo; |
21 | +import org.onosproject.yangutils.datamodel.YangModule; | ||
21 | import org.onosproject.yangutils.datamodel.YangSubModule; | 22 | import org.onosproject.yangutils.datamodel.YangSubModule; |
22 | import org.onosproject.yangutils.translator.exception.TranslatorException; | 23 | import org.onosproject.yangutils.translator.exception.TranslatorException; |
23 | import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator; | 24 | import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator; |
... | @@ -108,8 +109,7 @@ public class YangJavaSubModule | ... | @@ -108,8 +109,7 @@ public class YangJavaSubModule |
108 | * @return the name space string of the module. | 109 | * @return the name space string of the module. |
109 | */ | 110 | */ |
110 | private String getNameSpaceFromModule(YangBelongsTo belongsToInfo) { | 111 | private String getNameSpaceFromModule(YangBelongsTo belongsToInfo) { |
111 | - // TODO Auto-generated method stub | 112 | + return ((YangModule) belongsToInfo.getModuleNode()).getNameSpace().getUri(); |
112 | - return ""; | ||
113 | } | 113 | } |
114 | 114 | ||
115 | /** | 115 | /** | ... | ... |
... | @@ -257,6 +257,16 @@ public final class UtilConstants { | ... | @@ -257,6 +257,16 @@ public final class UtilConstants { |
257 | public static final String LISTENER_PKG = "org.onosproject.event"; | 257 | public static final String LISTENER_PKG = "org.onosproject.event"; |
258 | 258 | ||
259 | /** | 259 | /** |
260 | + * Static attribute for colon. | ||
261 | + */ | ||
262 | + public static final String COLON = ":"; | ||
263 | + | ||
264 | + /** | ||
265 | + * Static attribute for caret. | ||
266 | + */ | ||
267 | + public static final String CARET = "^"; | ||
268 | + | ||
269 | + /** | ||
260 | * Static attribute for input string. | 270 | * Static attribute for input string. |
261 | */ | 271 | */ |
262 | public static final String INPUT = "input"; | 272 | public static final String INPUT = "input"; |
... | @@ -932,6 +942,22 @@ public final class UtilConstants { | ... | @@ -932,6 +942,22 @@ public final class UtilConstants { |
932 | public static final String YANG_UTILS_TODO = "//TODO: YANG utils generated code"; | 942 | public static final String YANG_UTILS_TODO = "//TODO: YANG utils generated code"; |
933 | 943 | ||
934 | /** | 944 | /** |
945 | + * Static attribute for YANG file error. | ||
946 | + */ | ||
947 | + public static final String YANG_FILE_ERROR = "YANG file error : "; | ||
948 | + | ||
949 | + /** | ||
950 | + * Static attribute for unsupported error information. | ||
951 | + */ | ||
952 | + public static final String UNSUPPORTED_YANG_CONSTRUCT = " is not supported."; | ||
953 | + | ||
954 | + /** | ||
955 | + * Static attribute for currently unsupported error information. | ||
956 | + */ | ||
957 | + public static final String CURRENTLY_UNSUPPORTED = " is not supported in current version, please check wiki" + | ||
958 | + " for YANG utils road map."; | ||
959 | + | ||
960 | + /** | ||
935 | * Creates an instance of util constants. | 961 | * Creates an instance of util constants. |
936 | */ | 962 | */ |
937 | private UtilConstants() { | 963 | private UtilConstants() { | ... | ... |
... | @@ -287,7 +287,77 @@ public enum YangConstructType { | ... | @@ -287,7 +287,77 @@ public enum YangConstructType { |
287 | /** | 287 | /** |
288 | * Identifies the YANG pattern element parsed data. | 288 | * Identifies the YANG pattern element parsed data. |
289 | */ | 289 | */ |
290 | - PATTERN_DATA; | 290 | + PATTERN_DATA, |
291 | + | ||
292 | + /** | ||
293 | + * Identifies the YANG extension element parsed data. | ||
294 | + */ | ||
295 | + EXTENSION_DATA, | ||
296 | + | ||
297 | + /** | ||
298 | + * Identifies the YANG identity element parsed data. | ||
299 | + */ | ||
300 | + IDENTITY_DATA, | ||
301 | + | ||
302 | + /** | ||
303 | + * Identifies the YANG base element parsed data. | ||
304 | + */ | ||
305 | + BASE_DATA, | ||
306 | + | ||
307 | + /** | ||
308 | + * Identifies the YANG feature element parsed data. | ||
309 | + */ | ||
310 | + FEATURE_DATA, | ||
311 | + | ||
312 | + /** | ||
313 | + * Identifies the YANG if-feature element parsed data. | ||
314 | + */ | ||
315 | + IF_FEATURE_DATA, | ||
316 | + | ||
317 | + /** | ||
318 | + * Identifies the YANG path element parsed data. | ||
319 | + */ | ||
320 | + PATH_DATA, | ||
321 | + | ||
322 | + /** | ||
323 | + * Identifies the YANG require-instance element parsed data. | ||
324 | + */ | ||
325 | + REQUIRE_INSTANCE_DATA, | ||
326 | + | ||
327 | + /** | ||
328 | + * Identifies the YANG ordered-by element parsed data. | ||
329 | + */ | ||
330 | + ORDERED_BY_DATA, | ||
331 | + | ||
332 | + /** | ||
333 | + * Identifies the YANG error-message element parsed data. | ||
334 | + */ | ||
335 | + ERROR_MESSAGE_DATA, | ||
336 | + | ||
337 | + /** | ||
338 | + * Identifies the YANG error-app-tag element parsed data. | ||
339 | + */ | ||
340 | + ERROR_APP_TAG_DATA, | ||
341 | + | ||
342 | + /** | ||
343 | + * Identifies the YANG unique element parsed data. | ||
344 | + */ | ||
345 | + UNIQUE_DATA, | ||
346 | + | ||
347 | + /** | ||
348 | + * Identifies the YANG refine element parsed data. | ||
349 | + */ | ||
350 | + REFINE_DATA, | ||
351 | + | ||
352 | + /** | ||
353 | + * Identifies the YANG deviation element parsed data. | ||
354 | + */ | ||
355 | + DEVIATION_DATA, | ||
356 | + | ||
357 | + /** | ||
358 | + * Identifies the YANG anyxml element parsed data. | ||
359 | + */ | ||
360 | + ANYXML_DATA; | ||
291 | 361 | ||
292 | /** | 362 | /** |
293 | * Returns the YANG construct keyword corresponding to enum values. | 363 | * Returns the YANG construct keyword corresponding to enum values. |
... | @@ -406,6 +476,34 @@ public enum YangConstructType { | ... | @@ -406,6 +476,34 @@ public enum YangConstructType { |
406 | return "length"; | 476 | return "length"; |
407 | case PATTERN_DATA: | 477 | case PATTERN_DATA: |
408 | return "pattern"; | 478 | return "pattern"; |
479 | + case EXTENSION_DATA: | ||
480 | + return "extension"; | ||
481 | + case IDENTITY_DATA: | ||
482 | + return "identity"; | ||
483 | + case BASE_DATA: | ||
484 | + return "base"; | ||
485 | + case FEATURE_DATA: | ||
486 | + return "feature"; | ||
487 | + case IF_FEATURE_DATA: | ||
488 | + return "if-feature"; | ||
489 | + case PATH_DATA: | ||
490 | + return "path"; | ||
491 | + case REQUIRE_INSTANCE_DATA: | ||
492 | + return "require-instance"; | ||
493 | + case ORDERED_BY_DATA: | ||
494 | + return "ordered-by"; | ||
495 | + case ERROR_MESSAGE_DATA: | ||
496 | + return "error-message"; | ||
497 | + case ERROR_APP_TAG_DATA: | ||
498 | + return "error-app-tag"; | ||
499 | + case UNIQUE_DATA: | ||
500 | + return "unique"; | ||
501 | + case REFINE_DATA: | ||
502 | + return "refine"; | ||
503 | + case DEVIATION_DATA: | ||
504 | + return "deviation"; | ||
505 | + case ANYXML_DATA: | ||
506 | + return "anyxml"; | ||
409 | default: | 507 | default: |
410 | return "yang"; | 508 | return "yang"; |
411 | } | 509 | } | ... | ... |
... | @@ -21,6 +21,7 @@ import java.io.IOException; | ... | @@ -21,6 +21,7 @@ import java.io.IOException; |
21 | import java.util.LinkedList; | 21 | import java.util.LinkedList; |
22 | import java.util.List; | 22 | import java.util.List; |
23 | import java.util.Stack; | 23 | import java.util.Stack; |
24 | +import org.onosproject.yangutils.plugin.manager.YangFileInfo; | ||
24 | 25 | ||
25 | /** | 26 | /** |
26 | * Represents utility for searching the files in a directory. | 27 | * Represents utility for searching the files in a directory. |
... | @@ -51,17 +52,23 @@ public final class YangFileScanner { | ... | @@ -51,17 +52,23 @@ public final class YangFileScanner { |
51 | } | 52 | } |
52 | 53 | ||
53 | /** | 54 | /** |
54 | - * Returns the list of YANG files. | 55 | + * Returns the list of YANG file information. |
55 | * | 56 | * |
56 | * @param root specified directory | 57 | * @param root specified directory |
57 | - * @return list of YANG files | 58 | + * @return list of YANG file information |
58 | * @throws NullPointerException when no files are there | 59 | * @throws NullPointerException when no files are there |
59 | * @throws IOException when files get deleted while performing the | 60 | * @throws IOException when files get deleted while performing the |
60 | * operations | 61 | * operations |
61 | */ | 62 | */ |
62 | - public static List<String> getYangFiles(String root) throws IOException { | 63 | + public static List<YangFileInfo> getYangFiles(String root) throws IOException { |
63 | - | 64 | + List<String> yangFiles = getFiles(root, YANG_FILE_EXTENTION); |
64 | - return getFiles(root, YANG_FILE_EXTENTION); | 65 | + List<YangFileInfo> fileInfo = new LinkedList<>(); |
66 | + for (String yangFile : yangFiles) { | ||
67 | + YangFileInfo yangFileInfo = new YangFileInfo(); | ||
68 | + yangFileInfo.setYangFileName(yangFile); | ||
69 | + fileInfo.add(yangFileInfo); | ||
70 | + } | ||
71 | + return fileInfo; | ||
65 | } | 72 | } |
66 | 73 | ||
67 | /** | 74 | /** | ... | ... |
... | @@ -24,6 +24,7 @@ import java.nio.file.Files; | ... | @@ -24,6 +24,7 @@ import java.nio.file.Files; |
24 | import java.nio.file.StandardCopyOption; | 24 | import java.nio.file.StandardCopyOption; |
25 | import java.util.ArrayList; | 25 | import java.util.ArrayList; |
26 | import java.util.LinkedList; | 26 | import java.util.LinkedList; |
27 | +import java.util.Iterator; | ||
27 | import java.util.List; | 28 | import java.util.List; |
28 | import java.util.Stack; | 29 | import java.util.Stack; |
29 | 30 | ||
... | @@ -33,6 +34,7 @@ import org.apache.maven.project.MavenProject; | ... | @@ -33,6 +34,7 @@ import org.apache.maven.project.MavenProject; |
33 | import org.slf4j.Logger; | 34 | import org.slf4j.Logger; |
34 | import org.sonatype.plexus.build.incremental.BuildContext; | 35 | import org.sonatype.plexus.build.incremental.BuildContext; |
35 | 36 | ||
37 | +import org.onosproject.yangutils.plugin.manager.YangFileInfo; | ||
36 | import static org.onosproject.yangutils.utils.UtilConstants.COMMA; | 38 | import static org.onosproject.yangutils.utils.UtilConstants.COMMA; |
37 | import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING; | 39 | import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING; |
38 | import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE; | 40 | import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE; |
... | @@ -245,15 +247,15 @@ public final class YangIoUtils { | ... | @@ -245,15 +247,15 @@ public final class YangIoUtils { |
245 | /** | 247 | /** |
246 | * Copies YANG files to the current project's output directory. | 248 | * Copies YANG files to the current project's output directory. |
247 | * | 249 | * |
248 | - * @param yangFiles list of YANG files | 250 | + * @param yangFileInfo list of YANG files |
249 | * @param outputDir project's output directory | 251 | * @param outputDir project's output directory |
250 | * @param project maven project | 252 | * @param project maven project |
251 | * @throws IOException when fails to copy files to destination resource directory | 253 | * @throws IOException when fails to copy files to destination resource directory |
252 | */ | 254 | */ |
253 | - public static void copyYangFilesToTarget(List<String> yangFiles, String outputDir, MavenProject project) | 255 | + public static void copyYangFilesToTarget(List<YangFileInfo> yangFileInfo, String outputDir, MavenProject project) |
254 | throws IOException { | 256 | throws IOException { |
255 | 257 | ||
256 | - List<File> files = getListOfFile(yangFiles); | 258 | + List<File> files = getListOfFile(yangFileInfo); |
257 | 259 | ||
258 | String path = outputDir + TARGET_RESOURCE_PATH; | 260 | String path = outputDir + TARGET_RESOURCE_PATH; |
259 | File targetDir = new File(path); | 261 | File targetDir = new File(path); |
... | @@ -272,13 +274,15 @@ public final class YangIoUtils { | ... | @@ -272,13 +274,15 @@ public final class YangIoUtils { |
272 | /** | 274 | /** |
273 | * Provides a list of files from list of strings. | 275 | * Provides a list of files from list of strings. |
274 | * | 276 | * |
275 | - * @param strings list of strings | 277 | + * @param yangFileInfo list of yang file information |
276 | * @return list of files | 278 | * @return list of files |
277 | */ | 279 | */ |
278 | - private static List<File> getListOfFile(List<String> strings) { | 280 | + private static List<File> getListOfFile(List<YangFileInfo> yangFileInfo) { |
279 | List<File> files = new ArrayList<>(); | 281 | List<File> files = new ArrayList<>(); |
280 | - for (String file : strings) { | 282 | + Iterator<YangFileInfo> yangFileIterator = yangFileInfo.iterator(); |
281 | - files.add(new File(file)); | 283 | + while (yangFileIterator.hasNext()) { |
284 | + YangFileInfo yangFile = yangFileIterator.next(); | ||
285 | + files.add(new File(yangFile.getYangFileName())); | ||
282 | } | 286 | } |
283 | return files; | 287 | return files; |
284 | } | 288 | } | ... | ... |
... | @@ -380,6 +380,7 @@ package org.onosproject.yangutils.parser.antlrgencode; | ... | @@ -380,6 +380,7 @@ package org.onosproject.yangutils.parser.antlrgencode; |
380 | | leafListStatement | 380 | | leafListStatement |
381 | | listStatement | 381 | | listStatement |
382 | | choiceStatement | 382 | | choiceStatement |
383 | + | anyxmlStatement | ||
383 | | usesStatement; | 384 | | usesStatement; |
384 | 385 | ||
385 | /** | 386 | /** |
... | @@ -429,13 +430,26 @@ package org.onosproject.yangutils.parser.antlrgencode; | ... | @@ -429,13 +430,26 @@ package org.onosproject.yangutils.parser.antlrgencode; |
429 | * instance-identifier-specification / | 430 | * instance-identifier-specification / |
430 | * bits-specification / | 431 | * bits-specification / |
431 | * union-specification | 432 | * union-specification |
432 | - * TODO : decimal64-specification to be added | 433 | + * |
433 | */ | 434 | */ |
434 | - typeBodyStatements : numericalRestrictions | stringRestrictions | enumSpecification | 435 | + typeBodyStatements : numericalRestrictions | decimal64Specification | stringRestrictions | enumSpecification |
435 | | leafrefSpecification | identityrefSpecification | instanceIdentifierSpecification | 436 | | leafrefSpecification | identityrefSpecification | instanceIdentifierSpecification |
436 | | bitsSpecification | unionSpecification; | 437 | | bitsSpecification | unionSpecification; |
437 | 438 | ||
438 | /** | 439 | /** |
440 | + * fraction-digits-stmt = fraction-digits-keyword sep | ||
441 | + * fraction-digits-arg-str stmtend | ||
442 | + * | ||
443 | + * fraction-digits-arg-str = < a string that matches the rule | ||
444 | + * fraction-digits-arg > | ||
445 | + * | ||
446 | + * fraction-digits-arg = ("1" ["0" / "1" / "2" / "3" / "4" / | ||
447 | + * "5" / "6" / "7" / "8"]) | ||
448 | + * / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" | ||
449 | + */ | ||
450 | + decimal64Specification : FRACTION_DIGITS_KEYWORD fraction STMTEND; | ||
451 | + | ||
452 | + /** | ||
439 | * numerical-restrictions = range-stmt stmtsep | 453 | * numerical-restrictions = range-stmt stmtsep |
440 | */ | 454 | */ |
441 | numericalRestrictions : rangeStatement; | 455 | numericalRestrictions : rangeStatement; |
... | @@ -746,7 +760,7 @@ package org.onosproject.yangutils.parser.antlrgencode; | ... | @@ -746,7 +760,7 @@ package org.onosproject.yangutils.parser.antlrgencode; |
746 | /** | 760 | /** |
747 | * value-stmt = value-keyword sep integer-value stmtend | 761 | * value-stmt = value-keyword sep integer-value stmtend |
748 | */ | 762 | */ |
749 | - valueStatement : VALUE_KEYWORD ((MINUS INTEGER) | INTEGER) STMTEND; | 763 | + valueStatement : VALUE_KEYWORD value STMTEND; |
750 | 764 | ||
751 | /** | 765 | /** |
752 | * grouping-stmt = grouping-keyword sep identifier-arg-str optsep | 766 | * grouping-stmt = grouping-keyword sep identifier-arg-str optsep |
... | @@ -899,7 +913,7 @@ package org.onosproject.yangutils.parser.antlrgencode; | ... | @@ -899,7 +913,7 @@ package org.onosproject.yangutils.parser.antlrgencode; |
899 | * list-stmt / | 913 | * list-stmt / |
900 | * anyxml-stmt | 914 | * anyxml-stmt |
901 | */ | 915 | */ |
902 | - shortCaseStatement : containerStatement | leafStatement | leafListStatement | listStatement; | 916 | + shortCaseStatement : containerStatement | leafStatement | leafListStatement | listStatement | anyxmlStatement; |
903 | 917 | ||
904 | /** | 918 | /** |
905 | * case-stmt = case-keyword sep identifier-arg-str optsep | 919 | * case-stmt = case-keyword sep identifier-arg-str optsep |
... | @@ -919,6 +933,25 @@ package org.onosproject.yangutils.parser.antlrgencode; | ... | @@ -919,6 +933,25 @@ package org.onosproject.yangutils.parser.antlrgencode; |
919 | | descriptionStatement | referenceStatement | dataDefStatement)* RIGHT_CURLY_BRACE); | 933 | | descriptionStatement | referenceStatement | dataDefStatement)* RIGHT_CURLY_BRACE); |
920 | 934 | ||
921 | /** | 935 | /** |
936 | + * anyxml-stmt = anyxml-keyword sep identifier-arg-str optsep | ||
937 | + * (";" / | ||
938 | + * "{" stmtsep | ||
939 | + * ;; these stmts can appear in any order | ||
940 | + * [when-stmt stmtsep] | ||
941 | + * *(if-feature-stmt stmtsep) | ||
942 | + * *(must-stmt stmtsep) | ||
943 | + * [config-stmt stmtsep] | ||
944 | + * [mandatory-stmt stmtsep] | ||
945 | + * [status-stmt stmtsep] | ||
946 | + * [description-stmt stmtsep] | ||
947 | + * [reference-stmt stmtsep] | ||
948 | + * "}") | ||
949 | + */ | ||
950 | + anyxmlStatement : ANYXML_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | ||
951 | + | mustStatement | configStatement | mandatoryStatement | statusStatement | descriptionStatement | ||
952 | + | referenceStatement)* RIGHT_CURLY_BRACE); | ||
953 | + | ||
954 | + /** | ||
922 | * uses-stmt = uses-keyword sep identifier-ref-arg-str optsep | 955 | * uses-stmt = uses-keyword sep identifier-ref-arg-str optsep |
923 | * (";" / | 956 | * (";" / |
924 | * "{" stmtsep | 957 | * "{" stmtsep |
... | @@ -934,7 +967,7 @@ package org.onosproject.yangutils.parser.antlrgencode; | ... | @@ -934,7 +967,7 @@ package org.onosproject.yangutils.parser.antlrgencode; |
934 | * TODO : 0..1 occurance to be checked in listener | 967 | * TODO : 0..1 occurance to be checked in listener |
935 | */ | 968 | */ |
936 | usesStatement : USES_KEYWORD string (STMTEND | LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | statusStatement | 969 | usesStatement : USES_KEYWORD string (STMTEND | LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | statusStatement |
937 | - | descriptionStatement | referenceStatement | refineStatement | usesAugmentStatement)* RIGHT_CURLY_BRACE); | 970 | + | descriptionStatement | referenceStatement | refineStatement | augmentStatement)* RIGHT_CURLY_BRACE); |
938 | 971 | ||
939 | /** | 972 | /** |
940 | * refine-stmt = refine-keyword sep refine-arg-str optsep | 973 | * refine-stmt = refine-keyword sep refine-arg-str optsep |
... | @@ -951,7 +984,7 @@ package org.onosproject.yangutils.parser.antlrgencode; | ... | @@ -951,7 +984,7 @@ package org.onosproject.yangutils.parser.antlrgencode; |
951 | */ | 984 | */ |
952 | refineStatement : REFINE_KEYWORD refine (STMTEND | LEFT_CURLY_BRACE (refineContainerStatements | 985 | refineStatement : REFINE_KEYWORD refine (STMTEND | LEFT_CURLY_BRACE (refineContainerStatements |
953 | | refineLeafStatements | refineLeafListStatements | refineListStatements | refineChoiceStatements | 986 | | refineLeafStatements | refineLeafListStatements | refineListStatements | refineChoiceStatements |
954 | - | refineCaseStatements) RIGHT_CURLY_BRACE); | 987 | + | refineCaseStatements | refineAnyxmlStatements) RIGHT_CURLY_BRACE); |
955 | 988 | ||
956 | /** | 989 | /** |
957 | * refine-container-stmts = | 990 | * refine-container-stmts = |
... | @@ -1024,22 +1057,15 @@ package org.onosproject.yangutils.parser.antlrgencode; | ... | @@ -1024,22 +1057,15 @@ package org.onosproject.yangutils.parser.antlrgencode; |
1024 | refineCaseStatements : (descriptionStatement | referenceStatement)? | (referenceStatement | descriptionStatement)?; | 1057 | refineCaseStatements : (descriptionStatement | referenceStatement)? | (referenceStatement | descriptionStatement)?; |
1025 | 1058 | ||
1026 | /** | 1059 | /** |
1027 | - * uses-augment-stmt = augment-keyword sep uses-augment-arg-str optsep | 1060 | + * refine-anyxml-stmts = ;; these stmts can appear in any order |
1028 | - * "{" stmtsep | 1061 | + * *(must-stmt stmtsep) |
1029 | - * ;; these stmts can appear in any order | 1062 | + * [config-stmt stmtsep] |
1030 | - * [when-stmt stmtsep] | 1063 | + * [mandatory-stmt stmtsep] |
1031 | - * *(if-feature-stmt stmtsep) | ||
1032 | - * [status-stmt stmtsep] | ||
1033 | * [description-stmt stmtsep] | 1064 | * [description-stmt stmtsep] |
1034 | * [reference-stmt stmtsep] | 1065 | * [reference-stmt stmtsep] |
1035 | - * 1*((data-def-stmt stmtsep) / | ||
1036 | - * (case-stmt stmtsep)) | ||
1037 | - * "}" | ||
1038 | - * TODO : 0..1 occurance to be checked in listener | ||
1039 | */ | 1066 | */ |
1040 | - usesAugmentStatement : AUGMENT_KEYWORD augment LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | 1067 | + refineAnyxmlStatements : (mustStatement | configStatement | mandatoryStatement | descriptionStatement |
1041 | - | statusStatement | descriptionStatement | referenceStatement | dataDefStatement | 1068 | + | referenceStatement)*; |
1042 | - | caseStatement)* RIGHT_CURLY_BRACE; | ||
1043 | 1069 | ||
1044 | /** | 1070 | /** |
1045 | * augment-stmt = augment-keyword sep augment-arg-str optsep | 1071 | * augment-stmt = augment-keyword sep augment-arg-str optsep |
... | @@ -1251,6 +1277,10 @@ package org.onosproject.yangutils.parser.antlrgencode; | ... | @@ -1251,6 +1277,10 @@ package org.onosproject.yangutils.parser.antlrgencode; |
1251 | 1277 | ||
1252 | deviation : string; | 1278 | deviation : string; |
1253 | 1279 | ||
1280 | + value : string; | ||
1281 | + | ||
1282 | + fraction : string; | ||
1283 | + | ||
1254 | yangConstruct : ANYXML_KEYWORD | ARGUMENT_KEYWORD | AUGMENT_KEYWORD | BASE_KEYWORD | BELONGS_TO_KEYWORD | 1284 | yangConstruct : ANYXML_KEYWORD | ARGUMENT_KEYWORD | AUGMENT_KEYWORD | BASE_KEYWORD | BELONGS_TO_KEYWORD |
1255 | | BIT_KEYWORD | CASE_KEYWORD | CHOICE_KEYWORD | CONFIG_KEYWORD | CONTACT_KEYWORD | CONTAINER_KEYWORD | 1285 | | BIT_KEYWORD | CASE_KEYWORD | CHOICE_KEYWORD | CONFIG_KEYWORD | CONTACT_KEYWORD | CONTAINER_KEYWORD |
1256 | | DEFAULT_KEYWORD | DESCRIPTION_KEYWORD | ENUM_KEYWORD ERROR_APP_TAG_KEYWORD | ERROR_MESSAGE_KEYWORD | 1286 | | DEFAULT_KEYWORD | DESCRIPTION_KEYWORD | ENUM_KEYWORD ERROR_APP_TAG_KEYWORD | ERROR_MESSAGE_KEYWORD | ... | ... |
utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/TreeWalkListenerTest.java
0 → 100644
1 | +/* | ||
2 | + * Copyright 2016-present 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; | ||
18 | + | ||
19 | +import java.io.IOException; | ||
20 | + | ||
21 | +import org.junit.Rule; | ||
22 | +import org.junit.Test; | ||
23 | +import org.junit.rules.ExpectedException; | ||
24 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
25 | + | ||
26 | +/** | ||
27 | + * Test cases for testing tree walk listener functionality. | ||
28 | + */ | ||
29 | +public class TreeWalkListenerTest { | ||
30 | + | ||
31 | + private final YangUtilsParserManager manager = new YangUtilsParserManager(); | ||
32 | + | ||
33 | + @Rule | ||
34 | + public ExpectedException thrown = ExpectedException.none(); | ||
35 | + /** | ||
36 | + * Checks whether exception is thrown for ordered statement. | ||
37 | + */ | ||
38 | + @Test | ||
39 | + public void processOrderedByStatement() throws IOException, ParserException { | ||
40 | + thrown.expect(ParserException.class); | ||
41 | + thrown.expectMessage("YANG file error : \"ordered-by\" is not supported in current version, please check wiki" + | ||
42 | + " for YANG utils road map."); | ||
43 | + manager.getDataModel("src/test/resources/OrderedByStatement.yang"); | ||
44 | + } | ||
45 | + | ||
46 | + /** | ||
47 | + * Checks whether exception is thrown for anyxml statement. | ||
48 | + */ | ||
49 | + @Test | ||
50 | + public void processAnyXmlStatement() throws IOException, ParserException { | ||
51 | + thrown.expect(ParserException.class); | ||
52 | + thrown.expectMessage("YANG file error : \"anyxml\" is not supported."); | ||
53 | + manager.getDataModel("src/test/resources/AnyxmlStatement.yang"); | ||
54 | + } | ||
55 | +} |
... | @@ -134,9 +134,9 @@ public class ConfigListenerTest { | ... | @@ -134,9 +134,9 @@ public class ConfigListenerTest { |
134 | @Test | 134 | @Test |
135 | public void processModuleSubStatementConfig() throws IOException, ParserException { | 135 | public void processModuleSubStatementConfig() throws IOException, ParserException { |
136 | thrown.expect(ParserException.class); | 136 | thrown.expect(ParserException.class); |
137 | - thrown.expectMessage("mismatched input 'config' expecting {'augment', 'choice', 'contact', 'container'," | 137 | + thrown.expectMessage("mismatched input 'config' expecting {'anyxml', 'augment', 'choice', 'contact', " |
138 | - + " 'description', 'extension', 'deviation', 'feature', 'grouping', 'identity', 'import', 'include', " | 138 | + + "'container', 'description', 'extension', 'deviation', 'feature', 'grouping', 'identity', 'import'," |
139 | - + "'leaf', 'leaf-list', 'list', 'notification', 'organization', 'reference'," | 139 | + + " 'include', 'leaf', 'leaf-list', 'list', 'notification', 'organization', 'reference'," |
140 | + " 'revision', 'rpc', 'typedef', 'uses', '}'}"); | 140 | + " 'revision', 'rpc', 'typedef', 'uses', '}'}"); |
141 | YangNode node = manager.getDataModel("src/test/resources/ModuleSubStatementConfig.yang"); | 141 | YangNode node = manager.getDataModel("src/test/resources/ModuleSubStatementConfig.yang"); |
142 | } | 142 | } | ... | ... |
1 | +/* | ||
2 | + * Copyright 2016-present 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.listeners; | ||
18 | + | ||
19 | +import java.io.IOException; | ||
20 | +import java.util.ListIterator; | ||
21 | + | ||
22 | +import org.junit.Test; | ||
23 | +import org.onosproject.yangutils.datamodel.YangNode; | ||
24 | +import org.onosproject.yangutils.datamodel.YangModule; | ||
25 | +import org.onosproject.yangutils.datamodel.YangLeaf; | ||
26 | +import org.onosproject.yangutils.datamodel.YangChoice; | ||
27 | +import org.onosproject.yangutils.datamodel.YangContainer; | ||
28 | +import org.onosproject.yangutils.datamodel.YangNodeType; | ||
29 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
30 | +import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; | ||
31 | + | ||
32 | +import static org.hamcrest.core.Is.is; | ||
33 | +import static org.junit.Assert.assertThat; | ||
34 | + | ||
35 | +/** | ||
36 | + * Test cases for testing default listener functionality. | ||
37 | + */ | ||
38 | +public class DefaultListenerTest { | ||
39 | + | ||
40 | + private final YangUtilsParserManager manager = new YangUtilsParserManager(); | ||
41 | + | ||
42 | + /** | ||
43 | + * Checks if default value is set correctly. | ||
44 | + */ | ||
45 | + @Test | ||
46 | + public void processLeafSubStatementDefault() throws IOException, ParserException { | ||
47 | + | ||
48 | + YangNode node = manager.getDataModel("src/test/resources/LeafSubStatementDefault.yang"); | ||
49 | + // Check whether the data model tree returned is of type module. | ||
50 | + assertThat((node instanceof YangModule), is(true)); | ||
51 | + | ||
52 | + // Check whether the node type is set properly to module. | ||
53 | + assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE)); | ||
54 | + | ||
55 | + // Check whether the module name is set correctly. | ||
56 | + YangModule yangNode = (YangModule) node; | ||
57 | + assertThat(yangNode.getName(), is("Test")); | ||
58 | + | ||
59 | + ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator(); | ||
60 | + YangLeaf leafInfo = leafIterator.next(); | ||
61 | + | ||
62 | + assertThat(leafInfo.getName(), is("invalid-interval")); | ||
63 | + assertThat(leafInfo.getDefaultValueInString(), is("\"1\"")); | ||
64 | + } | ||
65 | + | ||
66 | + /** | ||
67 | + * Checks if default value is set correctly. | ||
68 | + */ | ||
69 | + @Test | ||
70 | + public void processChoiceSubStatementDefault() throws IOException, ParserException { | ||
71 | + | ||
72 | + YangNode node = manager.getDataModel("src/test/resources/ChoiceSubStatementDefault.yang"); | ||
73 | + // Check whether the data model tree returned is of type module. | ||
74 | + assertThat((node instanceof YangModule), is(true)); | ||
75 | + | ||
76 | + // Check whether the node type is set properly to module. | ||
77 | + assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE)); | ||
78 | + | ||
79 | + // Check whether the module name is set correctly. | ||
80 | + YangModule yangNode = (YangModule) node; | ||
81 | + assertThat(yangNode.getName(), is("Test")); | ||
82 | + | ||
83 | + YangContainer yangContainer = (YangContainer) yangNode.getChild(); | ||
84 | + assertThat(yangContainer.getName(), is("food")); | ||
85 | + | ||
86 | + YangChoice yangChoice = (YangChoice) yangContainer.getChild(); | ||
87 | + assertThat(yangChoice.getName(), is("snack")); | ||
88 | + assertThat(yangChoice.getDefaultValueInString(), is("\"hello\"")); | ||
89 | + } | ||
90 | +} |
... | @@ -18,7 +18,10 @@ package org.onosproject.yangutils.parser.impl.listeners; | ... | @@ -18,7 +18,10 @@ package org.onosproject.yangutils.parser.impl.listeners; |
18 | 18 | ||
19 | import static org.hamcrest.MatcherAssert.assertThat; | 19 | import static org.hamcrest.MatcherAssert.assertThat; |
20 | import static org.hamcrest.core.Is.is; | 20 | import static org.hamcrest.core.Is.is; |
21 | + | ||
22 | +import org.junit.Rule; | ||
21 | import org.junit.Test; | 23 | import org.junit.Test; |
24 | +import org.junit.rules.ExpectedException; | ||
22 | import org.onosproject.yangutils.datamodel.YangDataTypes; | 25 | import org.onosproject.yangutils.datamodel.YangDataTypes; |
23 | import org.onosproject.yangutils.datamodel.YangEnum; | 26 | import org.onosproject.yangutils.datamodel.YangEnum; |
24 | import org.onosproject.yangutils.datamodel.YangEnumeration; | 27 | import org.onosproject.yangutils.datamodel.YangEnumeration; |
... | @@ -38,6 +41,9 @@ import java.util.Set; | ... | @@ -38,6 +41,9 @@ import java.util.Set; |
38 | */ | 41 | */ |
39 | public class EnumListenerTest { | 42 | public class EnumListenerTest { |
40 | 43 | ||
44 | + @Rule | ||
45 | + public ExpectedException thrown = ExpectedException.none(); | ||
46 | + | ||
41 | private final YangUtilsParserManager manager = new YangUtilsParserManager(); | 47 | private final YangUtilsParserManager manager = new YangUtilsParserManager(); |
42 | 48 | ||
43 | /** | 49 | /** |
... | @@ -84,7 +90,28 @@ public class EnumListenerTest { | ... | @@ -84,7 +90,28 @@ public class EnumListenerTest { |
84 | */ | 90 | */ |
85 | @Test(expected = ParserException.class) | 91 | @Test(expected = ParserException.class) |
86 | public void processEnumWithDuplicateName() throws IOException, ParserException { | 92 | public void processEnumWithDuplicateName() throws IOException, ParserException { |
87 | - | ||
88 | YangNode node = manager.getDataModel("src/test/resources/EnumWithDuplicateName.yang"); | 93 | YangNode node = manager.getDataModel("src/test/resources/EnumWithDuplicateName.yang"); |
89 | } | 94 | } |
95 | + | ||
96 | + /** | ||
97 | + * Checks enum boundary value. | ||
98 | + */ | ||
99 | + @Test | ||
100 | + public void processEnumBoundaryValue() throws IOException, ParserException { | ||
101 | + thrown.expect(ParserException.class); | ||
102 | + thrown.expectMessage("YANG file error : value value 21474836472147483647 is not valid."); | ||
103 | + YangNode node = manager.getDataModel("src/test/resources/EnumBoundaryValue.yang"); | ||
104 | + } | ||
105 | + | ||
106 | + /** | ||
107 | + * Checks whether exception is thrown if value is not specified following max enum value. | ||
108 | + */ | ||
109 | + @Test | ||
110 | + public void processEnumMaxNextValue() throws IOException, ParserException { | ||
111 | + thrown.expect(ParserException.class); | ||
112 | + thrown.expectMessage("YANG file error : " | ||
113 | + + "An enum value MUST be specified for enum substatements following the one" | ||
114 | + + "with the current highest value"); | ||
115 | + YangNode node = manager.getDataModel("src/test/resources/EnumMaxNextValue.yang"); | ||
116 | + } | ||
90 | } | 117 | } | ... | ... |
... | @@ -203,12 +203,32 @@ public class KeyListenerTest { | ... | @@ -203,12 +203,32 @@ public class KeyListenerTest { |
203 | } | 203 | } |
204 | 204 | ||
205 | /** | 205 | /** |
206 | + * Checks key values are set correctly. | ||
207 | + */ | ||
208 | + @Test | ||
209 | + public void processKeyWithUsesInList() throws IOException, ParserException { | ||
210 | + YangNode node = manager.getDataModel("src/test/resources/KeyWithUsesInList.yang"); | ||
211 | + | ||
212 | + assertThat((node instanceof YangModule), is(true)); | ||
213 | + assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE)); | ||
214 | + YangModule yangNode = (YangModule) node; | ||
215 | + assertThat(yangNode.getName(), is("Test")); | ||
216 | + | ||
217 | + // Check whether the list is child of module | ||
218 | + YangList yangList = (YangList) yangNode.getChild().getNextSibling(); | ||
219 | + assertThat(yangList.getName(), is("valid")); | ||
220 | + | ||
221 | + ListIterator<String> keyList = yangList.getKeyList().listIterator(); | ||
222 | + assertThat(keyList.next(), is("invalid-interval")); | ||
223 | + } | ||
224 | + | ||
225 | + /** | ||
206 | * Checks whether exception is thrown when key leaf identifier is not found in list. | 226 | * Checks whether exception is thrown when key leaf identifier is not found in list. |
207 | */ | 227 | */ |
208 | @Test | 228 | @Test |
209 | public void processInvalidLeafIdentifier() throws IOException, ParserException { | 229 | public void processInvalidLeafIdentifier() throws IOException, ParserException { |
210 | thrown.expect(ParserException.class); | 230 | thrown.expect(ParserException.class); |
211 | - thrown.expectMessage("Leaf identifier must refer to a child leaf of the list"); | 231 | + thrown.expectMessage("An identifier, in key, must refer to a child leaf of the list"); |
212 | YangNode node = manager.getDataModel("src/test/resources/InvalidLeafIdentifier.yang"); | 232 | YangNode node = manager.getDataModel("src/test/resources/InvalidLeafIdentifier.yang"); |
213 | } | 233 | } |
214 | 234 | ||
... | @@ -218,7 +238,7 @@ public class KeyListenerTest { | ... | @@ -218,7 +238,7 @@ public class KeyListenerTest { |
218 | @Test | 238 | @Test |
219 | public void processInvalidLeafListIdentifier() throws IOException, ParserException { | 239 | public void processInvalidLeafListIdentifier() throws IOException, ParserException { |
220 | thrown.expect(ParserException.class); | 240 | thrown.expect(ParserException.class); |
221 | - thrown.expectMessage("Leaf-list identifier must refer to a child leaf of the list"); | 241 | + thrown.expectMessage("An identifier, in key, must refer to a child leaf of the list"); |
222 | YangNode node = manager.getDataModel("src/test/resources/InvalidLeafListIdentifier.yang"); | 242 | YangNode node = manager.getDataModel("src/test/resources/InvalidLeafListIdentifier.yang"); |
223 | } | 243 | } |
224 | 244 | ... | ... |
... | @@ -94,9 +94,9 @@ public class LeafListListenerTest { | ... | @@ -94,9 +94,9 @@ public class LeafListListenerTest { |
94 | @Test | 94 | @Test |
95 | public void processLeafListInvalidStatement() throws IOException, ParserException { | 95 | public void processLeafListInvalidStatement() throws IOException, ParserException { |
96 | thrown.expect(ParserException.class); | 96 | thrown.expect(ParserException.class); |
97 | - thrown.expectMessage("mismatched input 'leaflist' expecting {'augment', 'choice', 'contact', 'container'," | 97 | + thrown.expectMessage("mismatched input 'leaflist' expecting {'anyxml', 'augment', 'choice', 'contact', " |
98 | - + " 'description', 'extension', 'deviation', 'feature', 'grouping', 'identity', 'import', 'include'," | 98 | + + "'container', 'description', 'extension', 'deviation', 'feature', 'grouping', 'identity', 'import'," |
99 | - + " 'leaf', 'leaf-list', 'list', 'notification', 'organization', 'reference'," | 99 | + + " 'include', 'leaf', 'leaf-list', 'list', 'notification', 'organization', 'reference'," |
100 | + " 'revision', 'rpc', 'typedef', 'uses', '}'}"); | 100 | + " 'revision', 'rpc', 'typedef', 'uses', '}'}"); |
101 | YangNode node = manager.getDataModel("src/test/resources/LeafListInvalidStatement.yang"); | 101 | YangNode node = manager.getDataModel("src/test/resources/LeafListInvalidStatement.yang"); |
102 | } | 102 | } | ... | ... |
... | @@ -95,9 +95,9 @@ public class LeafListenerTest { | ... | @@ -95,9 +95,9 @@ public class LeafListenerTest { |
95 | @Test | 95 | @Test |
96 | public void processLeafInvalidStatement() throws IOException, ParserException { | 96 | public void processLeafInvalidStatement() throws IOException, ParserException { |
97 | thrown.expect(ParserException.class); | 97 | thrown.expect(ParserException.class); |
98 | - thrown.expectMessage("mismatched input 'leafs' expecting {'augment', 'choice', 'contact', 'container'," | 98 | + thrown.expectMessage("mismatched input 'leafs' expecting {'anyxml', 'augment', 'choice', 'contact', " |
99 | - + " 'description', 'extension', 'deviation', 'feature', 'grouping', 'identity', 'import', 'include'," | 99 | + + "'container', 'description', 'extension', 'deviation', 'feature', 'grouping', 'identity', 'import'," |
100 | - + " 'leaf', 'leaf-list', 'list', 'notification', 'organization', 'reference'," | 100 | + + " 'include', 'leaf', 'leaf-list', 'list', 'notification', 'organization', 'reference'," |
101 | + " 'revision', 'rpc', 'typedef', 'uses', '}'}"); | 101 | + " 'revision', 'rpc', 'typedef', 'uses', '}'}"); |
102 | YangNode node = manager.getDataModel("src/test/resources/LeafInvalidStatement.yang"); | 102 | YangNode node = manager.getDataModel("src/test/resources/LeafInvalidStatement.yang"); |
103 | } | 103 | } | ... | ... |
... | @@ -232,4 +232,39 @@ public class LengthRestrictionListenerTest { | ... | @@ -232,4 +232,39 @@ public class LengthRestrictionListenerTest { |
232 | " 18446744073709551615."); | 232 | " 18446744073709551615."); |
233 | YangNode node = manager.getDataModel("src/test/resources/LengthWithInvalidInterval.yang"); | 233 | YangNode node = manager.getDataModel("src/test/resources/LengthWithInvalidInterval.yang"); |
234 | } | 234 | } |
235 | + | ||
236 | + /** | ||
237 | + * Checks valid length substatements. | ||
238 | + */ | ||
239 | + @Test | ||
240 | + public void processLengthSubStatements() throws IOException, ParserException { | ||
241 | + | ||
242 | + YangNode node = manager.getDataModel("src/test/resources/LengthSubStatements.yang"); | ||
243 | + | ||
244 | + assertThat((node instanceof YangModule), is(true)); | ||
245 | + assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE)); | ||
246 | + YangModule yangNode = (YangModule) node; | ||
247 | + assertThat(yangNode.getName(), is("Test")); | ||
248 | + | ||
249 | + ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator(); | ||
250 | + YangLeaf leafInfo = leafIterator.next(); | ||
251 | + | ||
252 | + assertThat(leafInfo.getName(), is("invalid-interval")); | ||
253 | + assertThat(leafInfo.getDataType().getDataTypeName(), is("string")); | ||
254 | + assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING)); | ||
255 | + YangStringRestriction stringRestriction = (YangStringRestriction) leafInfo | ||
256 | + .getDataType().getDataTypeExtendedInfo(); | ||
257 | + YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction(); | ||
258 | + | ||
259 | + assertThat(lengthRestriction.getDescription(), is("\"length description\"")); | ||
260 | + assertThat(lengthRestriction.getReference(), is("\"length reference\"")); | ||
261 | + | ||
262 | + ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals() | ||
263 | + .listIterator(); | ||
264 | + | ||
265 | + YangRangeInterval rangeInterval = lengthListIterator.next(); | ||
266 | + | ||
267 | + assertThat(((YangUint64) rangeInterval.getStartValue()).getValue(), is(BigInteger.valueOf(0))); | ||
268 | + assertThat(((YangUint64) rangeInterval.getEndValue()).getValue(), is(BigInteger.valueOf(100))); | ||
269 | + } | ||
235 | } | 270 | } | ... | ... |
... | @@ -148,9 +148,9 @@ public class MandatoryListenerTest { | ... | @@ -148,9 +148,9 @@ public class MandatoryListenerTest { |
148 | @Test | 148 | @Test |
149 | public void processModuleSubStatementMandatory() throws IOException, ParserException { | 149 | public void processModuleSubStatementMandatory() throws IOException, ParserException { |
150 | thrown.expect(ParserException.class); | 150 | thrown.expect(ParserException.class); |
151 | - thrown.expectMessage("mismatched input 'mandatory' expecting {'augment', 'choice', 'contact', 'container'," | 151 | + thrown.expectMessage("mismatched input 'mandatory' expecting {'anyxml', 'augment', 'choice', 'contact'," |
152 | - + " 'description', 'extension', 'deviation', 'feature', 'grouping', 'identity', 'import', 'include'," | 152 | + + " 'container', 'description', 'extension', 'deviation', 'feature', 'grouping', 'identity', 'import'," |
153 | - + " 'leaf', 'leaf-list', 'list', 'notification', 'organization', 'reference'," | 153 | + + " 'include', 'leaf', 'leaf-list', 'list', 'notification', 'organization', 'reference'," |
154 | + " 'revision', 'rpc', 'typedef', 'uses', '}'}"); | 154 | + " 'revision', 'rpc', 'typedef', 'uses', '}'}"); |
155 | YangNode node = manager.getDataModel("src/test/resources/ModuleSubStatementMandatory.yang"); | 155 | YangNode node = manager.getDataModel("src/test/resources/ModuleSubStatementMandatory.yang"); |
156 | } | 156 | } | ... | ... |
... | @@ -166,4 +166,32 @@ public class PatternRestrictionListenerTest { | ... | @@ -166,4 +166,32 @@ public class PatternRestrictionListenerTest { |
166 | .getPatternList().listIterator(); | 166 | .getPatternList().listIterator(); |
167 | assertThat(patternListIterator.next(), is("-[0-9]+|[0-9]+")); | 167 | assertThat(patternListIterator.next(), is("-[0-9]+|[0-9]+")); |
168 | } | 168 | } |
169 | + | ||
170 | + /** | ||
171 | + * Checks valid pattern substatement. | ||
172 | + */ | ||
173 | + @Test | ||
174 | + public void processPatternSubStatements() throws IOException, ParserException { | ||
175 | + | ||
176 | + YangNode node = manager.getDataModel("src/test/resources/PatternSubStatements.yang"); | ||
177 | + | ||
178 | + assertThat((node instanceof YangModule), is(true)); | ||
179 | + assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE)); | ||
180 | + YangModule yangNode = (YangModule) node; | ||
181 | + assertThat(yangNode.getName(), is("Test")); | ||
182 | + | ||
183 | + ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator(); | ||
184 | + YangLeaf leafInfo = leafIterator.next(); | ||
185 | + | ||
186 | + assertThat(leafInfo.getName(), is("invalid-interval")); | ||
187 | + assertThat(leafInfo.getDataType().getDataTypeName(), is("string")); | ||
188 | + assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING)); | ||
189 | + YangStringRestriction stringRestriction = (YangStringRestriction) leafInfo | ||
190 | + .getDataType().getDataTypeExtendedInfo(); | ||
191 | + assertThat(stringRestriction.getDescription(), is("\"pattern description\"")); | ||
192 | + assertThat(stringRestriction.getReference(), is("\"pattern reference\"")); | ||
193 | + ListIterator<String> patternListIterator = stringRestriction.getPatternRestriction() | ||
194 | + .getPatternList().listIterator(); | ||
195 | + assertThat(patternListIterator.next(), is("[a-zA-Z]")); | ||
196 | + } | ||
169 | } | 197 | } | ... | ... |
... | @@ -174,4 +174,37 @@ public class RangeRestrictionListenerTest { | ... | @@ -174,4 +174,37 @@ public class RangeRestrictionListenerTest { |
174 | thrown.expectMessage("YANG file error : Input value \"a\" is not a valid int32."); | 174 | thrown.expectMessage("YANG file error : Input value \"a\" is not a valid int32."); |
175 | YangNode node = manager.getDataModel("src/test/resources/RangeWithInvalidIntegerPattern.yang"); | 175 | YangNode node = manager.getDataModel("src/test/resources/RangeWithInvalidIntegerPattern.yang"); |
176 | } | 176 | } |
177 | + | ||
178 | + /** | ||
179 | + * Checks valid range statement with description. | ||
180 | + */ | ||
181 | + @Test | ||
182 | + public void processRangeSubStatements() throws IOException, ParserException { | ||
183 | + | ||
184 | + YangNode node = manager.getDataModel("src/test/resources/RangeSubStatements.yang"); | ||
185 | + | ||
186 | + assertThat((node instanceof YangModule), is(true)); | ||
187 | + assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE)); | ||
188 | + YangModule yangNode = (YangModule) node; | ||
189 | + assertThat(yangNode.getName(), is("Test")); | ||
190 | + | ||
191 | + ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator(); | ||
192 | + YangLeaf leafInfo = leafIterator.next(); | ||
193 | + | ||
194 | + assertThat(leafInfo.getName(), is("invalid-interval")); | ||
195 | + assertThat(leafInfo.getDataType().getDataTypeName(), is("int32")); | ||
196 | + assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.INT32)); | ||
197 | + YangRangeRestriction rangeRestriction = (YangRangeRestriction) leafInfo | ||
198 | + .getDataType().getDataTypeExtendedInfo(); | ||
199 | + | ||
200 | + assertThat(rangeRestriction.getDescription(), is("\"range description\"")); | ||
201 | + assertThat(rangeRestriction.getReference(), is("\"range reference\"")); | ||
202 | + | ||
203 | + ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals() | ||
204 | + .listIterator(); | ||
205 | + YangRangeInterval rangeInterval = rangeListIterator.next(); | ||
206 | + assertThat(((YangInt32) rangeInterval.getStartValue()).getValue(), is(1)); | ||
207 | + assertThat(((YangInt32) rangeInterval.getEndValue()).getValue(), is(4)); | ||
208 | + assertThat(((YangInt32) rangeInterval.getEndValue()).getValue(), is(4)); | ||
209 | + } | ||
177 | } | 210 | } | ... | ... |
... | @@ -150,9 +150,9 @@ public class StatusListenerTest { | ... | @@ -150,9 +150,9 @@ public class StatusListenerTest { |
150 | @Test | 150 | @Test |
151 | public void processModuleSubStatementStatus() throws IOException, ParserException { | 151 | public void processModuleSubStatementStatus() throws IOException, ParserException { |
152 | thrown.expect(ParserException.class); | 152 | thrown.expect(ParserException.class); |
153 | - thrown.expectMessage("mismatched input 'status' expecting {'augment', 'choice', 'contact', 'container', " | 153 | + thrown.expectMessage("mismatched input 'status' expecting {'anyxml', 'augment', 'choice', 'contact', " |
154 | - + "'description', 'extension', 'deviation', 'feature', 'grouping', 'identity', 'import', 'include'," | 154 | + + "'container', 'description', 'extension', 'deviation', 'feature', 'grouping', 'identity', 'import'," |
155 | - + " 'leaf', 'leaf-list', 'list', 'notification', 'organization', 'reference', " | 155 | + + " 'include', 'leaf', 'leaf-list', 'list', 'notification', 'organization', 'reference', " |
156 | + "'revision', 'rpc', 'typedef', 'uses', '}'}"); | 156 | + "'revision', 'rpc', 'typedef', 'uses', '}'}"); |
157 | YangNode node = manager.getDataModel("src/test/resources/ModuleSubStatementStatus.yang"); | 157 | YangNode node = manager.getDataModel("src/test/resources/ModuleSubStatementStatus.yang"); |
158 | } | 158 | } | ... | ... |
utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/UnitsListenerTest.java
... | @@ -76,9 +76,9 @@ public class UnitsListenerTest { | ... | @@ -76,9 +76,9 @@ public class UnitsListenerTest { |
76 | @Test | 76 | @Test |
77 | public void processModuleSubStatementUnits() throws IOException, ParserException { | 77 | public void processModuleSubStatementUnits() throws IOException, ParserException { |
78 | thrown.expect(ParserException.class); | 78 | thrown.expect(ParserException.class); |
79 | - thrown.expectMessage("mismatched input 'type' expecting {'augment', 'choice', 'contact', 'container', " | 79 | + thrown.expectMessage("mismatched input 'type' expecting {'anyxml', 'augment', 'choice', 'contact', " |
80 | - + "'description', 'extension', 'deviation', 'feature', 'grouping', 'identity', 'import', " | 80 | + + "'container', 'description', 'extension', 'deviation', 'feature', 'grouping', 'identity'," |
81 | - + "'include', 'leaf', 'leaf-list', 'list', 'notification', 'organization', " | 81 | + + " 'import', 'include', 'leaf', 'leaf-list', 'list', 'notification', 'organization', " |
82 | + "'reference', 'revision', 'rpc', 'typedef', 'uses', '}'}"); | 82 | + "'reference', 'revision', 'rpc', 'typedef', 'uses', '}'}"); |
83 | YangNode node = manager.getDataModel("src/test/resources/ModuleSubStatementUnits.yang"); | 83 | YangNode node = manager.getDataModel("src/test/resources/ModuleSubStatementUnits.yang"); |
84 | } | 84 | } | ... | ... |
utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ValueListenerTest.java
... | @@ -80,6 +80,84 @@ public class ValueListenerTest { | ... | @@ -80,6 +80,84 @@ public class ValueListenerTest { |
80 | } | 80 | } |
81 | 81 | ||
82 | /** | 82 | /** |
83 | + * Checks explicitly configured negative value. | ||
84 | + */ | ||
85 | + @Test | ||
86 | + public void processValueStatementWithNegativeValue() throws IOException, ParserException { | ||
87 | + | ||
88 | + YangNode node = manager.getDataModel("src/test/resources/ValueStatementWithNegativeValue.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.getName(), is("speed")); | ||
104 | + assertThat(leafInfo.getDataType().getDataTypeName(), is("enumeration")); | ||
105 | + assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.ENUMERATION)); | ||
106 | + assertThat(((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getName(), | ||
107 | + is("speed_enum")); | ||
108 | + | ||
109 | + Set<YangEnum> enumSet = ((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getEnumSet(); | ||
110 | + for (YangEnum tmp : enumSet) { | ||
111 | + if (tmp.getNamedValue().equals("10m")) { | ||
112 | + assertThat(tmp.getValue(), is(-2)); | ||
113 | + } else if (tmp.getNamedValue().equals("100m")) { | ||
114 | + assertThat(tmp.getValue(), is(-1)); | ||
115 | + } else if (tmp.getNamedValue().equals("auto")) { | ||
116 | + assertThat(tmp.getValue(), is(0)); | ||
117 | + } | ||
118 | + } | ||
119 | + } | ||
120 | + | ||
121 | + /** | ||
122 | + * Checks explicitly configured value with double quotes. | ||
123 | + */ | ||
124 | + @Test | ||
125 | + public void processValueStatementWithQuotes() throws IOException, ParserException { | ||
126 | + | ||
127 | + YangNode node = manager.getDataModel("src/test/resources/ValueStatementWithQuotes.yang"); | ||
128 | + | ||
129 | + // Check whether the data model tree returned is of type module. | ||
130 | + assertThat((node instanceof YangModule), is(true)); | ||
131 | + | ||
132 | + // Check whether the node type is set properly to module. | ||
133 | + assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE)); | ||
134 | + | ||
135 | + // Check whether the module name is set correctly. | ||
136 | + YangModule yangNode = (YangModule) node; | ||
137 | + assertThat(yangNode.getName(), is("Test")); | ||
138 | + | ||
139 | + ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator(); | ||
140 | + YangLeaf leafInfo = leafIterator.next(); | ||
141 | + | ||
142 | + assertThat(leafInfo.getName(), is("speed")); | ||
143 | + assertThat(leafInfo.getDataType().getDataTypeName(), is("enumeration")); | ||
144 | + assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.ENUMERATION)); | ||
145 | + assertThat(((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getName(), | ||
146 | + is("speed_enum")); | ||
147 | + | ||
148 | + Set<YangEnum> enumSet = ((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getEnumSet(); | ||
149 | + for (YangEnum tmp : enumSet) { | ||
150 | + if (tmp.getNamedValue().equals("10m")) { | ||
151 | + assertThat(tmp.getValue(), is(10)); | ||
152 | + } else if (tmp.getNamedValue().equals("100m")) { | ||
153 | + assertThat(tmp.getValue(), is(100)); | ||
154 | + } else if (tmp.getNamedValue().equals("auto")) { | ||
155 | + assertThat(tmp.getValue(), is(1000)); | ||
156 | + } | ||
157 | + } | ||
158 | + } | ||
159 | + | ||
160 | + /** | ||
83 | * Checks explicit value and auto generated value. | 161 | * Checks explicit value and auto generated value. |
84 | */ | 162 | */ |
85 | @Test | 163 | @Test | ... | ... |
... | @@ -26,6 +26,7 @@ import java.util.List; | ... | @@ -26,6 +26,7 @@ import java.util.List; |
26 | import org.junit.Rule; | 26 | import org.junit.Rule; |
27 | import org.junit.Test; | 27 | import org.junit.Test; |
28 | import org.junit.rules.ExpectedException; | 28 | import org.junit.rules.ExpectedException; |
29 | +import org.onosproject.yangutils.plugin.manager.YangFileInfo; | ||
29 | 30 | ||
30 | import static org.hamcrest.core.Is.is; | 31 | import static org.hamcrest.core.Is.is; |
31 | import static org.hamcrest.core.IsNot.not; | 32 | import static org.hamcrest.core.IsNot.not; |
... | @@ -135,7 +136,7 @@ public final class YangFileScannerTest { | ... | @@ -135,7 +136,7 @@ public final class YangFileScannerTest { |
135 | 136 | ||
136 | String emptyYangDir = baseDir + separator + "scanner1"; | 137 | String emptyYangDir = baseDir + separator + "scanner1"; |
137 | File path = createDirectory(emptyYangDir); | 138 | File path = createDirectory(emptyYangDir); |
138 | - List<String> emptyDirContents = getYangFiles(path.toString()); | 139 | + List<YangFileInfo> emptyDirContents = getYangFiles(path.toString()); |
139 | List<String> expectedContents = new LinkedList<>(); | 140 | List<String> expectedContents = new LinkedList<>(); |
140 | assertThat(true, is(emptyDirContents.equals(expectedContents))); | 141 | assertThat(true, is(emptyDirContents.equals(expectedContents))); |
141 | } | 142 | } | ... | ... |
1 | +module Test { | ||
2 | + yang-version 1; | ||
3 | + namespace http://huawei.com; | ||
4 | + prefix Ant; | ||
5 | + container food { | ||
6 | + choice snack { | ||
7 | + case sports-arena { | ||
8 | + leaf pretzel { | ||
9 | + type string; | ||
10 | + } | ||
11 | + leaf beer { | ||
12 | + type string; | ||
13 | + } | ||
14 | + } | ||
15 | + case late-night { | ||
16 | + leaf chocolate { | ||
17 | + type string; | ||
18 | + } | ||
19 | + } | ||
20 | + default "hello"; | ||
21 | + } | ||
22 | + } | ||
23 | +} |
1 | +module Test { | ||
2 | + yang-version 1; | ||
3 | + namespace http://huawei.com; | ||
4 | + prefix Ant; | ||
5 | + grouping network { | ||
6 | + leaf invalid-interval { | ||
7 | + type "string"; | ||
8 | + units "seconds"; | ||
9 | + status current; | ||
10 | + reference "RFC 6020"; | ||
11 | + } | ||
12 | + } | ||
13 | + list valid { | ||
14 | + key "invalid-interval"; | ||
15 | + leaf invalid { | ||
16 | + type "string"; | ||
17 | + units "seconds"; | ||
18 | + status current; | ||
19 | + reference "RFC 6020"; | ||
20 | + } | ||
21 | + uses "network"; | ||
22 | + } | ||
23 | +} |
1 | +module Test { | ||
2 | + yang-version 1; | ||
3 | + namespace http://huawei.com; | ||
4 | + prefix Ant; | ||
5 | + leaf invalid-interval { | ||
6 | + type "uint16"; | ||
7 | + units "seconds"; | ||
8 | + default "1"; | ||
9 | + description "Interval before a route is declared invalid"; | ||
10 | + config true; | ||
11 | + mandatory true; | ||
12 | + status current; | ||
13 | + reference "RFC 6020"; | ||
14 | + } | ||
15 | +} |
... | @@ -10,7 +10,6 @@ module Test { | ... | @@ -10,7 +10,6 @@ module Test { |
10 | prefix "P"; | 10 | prefix "P"; |
11 | } | 11 | } |
12 | augment "/if:interfaces/if:ifEntry" { | 12 | augment "/if:interfaces/if:ifEntry" { |
13 | - when "if:ifType='ds0'"; | ||
14 | leaf ds0ChannelNumber { | 13 | leaf ds0ChannelNumber { |
15 | type P:ChannelNumber; | 14 | type P:ChannelNumber; |
16 | } | 15 | } | ... | ... |
... | @@ -14,9 +14,7 @@ module rock { | ... | @@ -14,9 +14,7 @@ module rock { |
14 | type int32; | 14 | type int32; |
15 | } | 15 | } |
16 | leaf if-name { | 16 | leaf if-name { |
17 | - type leafref { | 17 | + type leafref; |
18 | - path "/interface/name"; | ||
19 | - } | ||
20 | } | 18 | } |
21 | leaf if-admin-status { | 19 | leaf if-admin-status { |
22 | type P:admin-status; | 20 | type P:admin-status; | ... | ... |
-
Please register or login to post a comment