Committed by
Gerrit Code Review
[ONOS-4636]YANG Grouping linking bug fix + YANG Code review comment fix
Change-Id: I68ee8dd08266a02593e217cef1a9bb010037d673 (cherry picked from commit 2ee9e7e8)
Showing
72 changed files
with
1920 additions
and
547 deletions
... | @@ -79,7 +79,8 @@ import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCol | ... | @@ -79,7 +79,8 @@ import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCol |
79 | /** | 79 | /** |
80 | * Representation of data model node to maintain information defined in YANG augment. | 80 | * Representation of data model node to maintain information defined in YANG augment. |
81 | */ | 81 | */ |
82 | -public class YangAugment extends YangNode | 82 | +public class YangAugment |
83 | + extends YangNode | ||
83 | implements YangLeavesHolder, YangCommonInfo, Parsable, CollisionDetector { | 84 | implements YangLeavesHolder, YangCommonInfo, Parsable, CollisionDetector { |
84 | 85 | ||
85 | /** | 86 | /** |
... | @@ -163,13 +164,15 @@ public class YangAugment extends YangNode | ... | @@ -163,13 +164,15 @@ public class YangAugment extends YangNode |
163 | } | 164 | } |
164 | 165 | ||
165 | @Override | 166 | @Override |
166 | - public void detectCollidingChild(String identifierName, YangConstructType dataType) throws DataModelException { | 167 | + public void detectCollidingChild(String identifierName, YangConstructType dataType) |
168 | + throws DataModelException { | ||
167 | // Detect colliding child. | 169 | // Detect colliding child. |
168 | detectCollidingChildUtil(identifierName, dataType, this); | 170 | detectCollidingChildUtil(identifierName, dataType, this); |
169 | } | 171 | } |
170 | 172 | ||
171 | @Override | 173 | @Override |
172 | - public void detectSelfCollision(String identifierName, YangConstructType dataType) throws DataModelException { | 174 | + public void detectSelfCollision(String identifierName, YangConstructType dataType) |
175 | + throws DataModelException { | ||
173 | if (this.getName().equals(identifierName)) { | 176 | if (this.getName().equals(identifierName)) { |
174 | throw new DataModelException("YANG file error: Duplicate input identifier detected, same as input \"" | 177 | throw new DataModelException("YANG file error: Duplicate input identifier detected, same as input \"" |
175 | + this.getName() + "\""); | 178 | + this.getName() + "\""); |
... | @@ -191,7 +194,8 @@ public class YangAugment extends YangNode | ... | @@ -191,7 +194,8 @@ public class YangAugment extends YangNode |
191 | * | 194 | * |
192 | * @param leafsList the list of leaf to set | 195 | * @param leafsList the list of leaf to set |
193 | */ | 196 | */ |
194 | - private void setListOfLeaf(List<YangLeaf> leafsList) { | 197 | + @Override |
198 | + public void setListOfLeaf(List<YangLeaf> leafsList) { | ||
195 | listOfLeaf = leafsList; | 199 | listOfLeaf = leafsList; |
196 | } | 200 | } |
197 | 201 | ||
... | @@ -224,7 +228,8 @@ public class YangAugment extends YangNode | ... | @@ -224,7 +228,8 @@ public class YangAugment extends YangNode |
224 | * | 228 | * |
225 | * @param listOfLeafList the list of leaf-list to set | 229 | * @param listOfLeafList the list of leaf-list to set |
226 | */ | 230 | */ |
227 | - private void setListOfLeafList(List<YangLeafList> listOfLeafList) { | 231 | + @Override |
232 | + public void setListOfLeafList(List<YangLeafList> listOfLeafList) { | ||
228 | this.listOfLeafList = listOfLeafList; | 233 | this.listOfLeafList = listOfLeafList; |
229 | } | 234 | } |
230 | 235 | ||
... | @@ -298,7 +303,8 @@ public class YangAugment extends YangNode | ... | @@ -298,7 +303,8 @@ public class YangAugment extends YangNode |
298 | * @throws DataModelException a violation of data model rules | 303 | * @throws DataModelException a violation of data model rules |
299 | */ | 304 | */ |
300 | @Override | 305 | @Override |
301 | - public void validateDataOnEntry() throws DataModelException { | 306 | + public void validateDataOnEntry() |
307 | + throws DataModelException { | ||
302 | // TODO auto-generated method stub, to be implemented by parser | 308 | // TODO auto-generated method stub, to be implemented by parser |
303 | } | 309 | } |
304 | 310 | ||
... | @@ -308,7 +314,8 @@ public class YangAugment extends YangNode | ... | @@ -308,7 +314,8 @@ public class YangAugment extends YangNode |
308 | * @throws DataModelException a violation of data model rules | 314 | * @throws DataModelException a violation of data model rules |
309 | */ | 315 | */ |
310 | @Override | 316 | @Override |
311 | - public void validateDataOnExit() throws DataModelException { | 317 | + public void validateDataOnExit() |
318 | + throws DataModelException { | ||
312 | // TODO auto-generated method stub, to be implemented by parser | 319 | // TODO auto-generated method stub, to be implemented by parser |
313 | } | 320 | } |
314 | 321 | ... | ... |
... | @@ -88,10 +88,12 @@ import static org.onosproject.yangutils.utils.YangConstructType.CASE_DATA; | ... | @@ -88,10 +88,12 @@ import static org.onosproject.yangutils.utils.YangConstructType.CASE_DATA; |
88 | * | when | 7.19.5 | 0..1 |-TODO | | 88 | * | when | 7.19.5 | 0..1 |-TODO | |
89 | * +--------------+---------+-------------+------------------+ | 89 | * +--------------+---------+-------------+------------------+ |
90 | */ | 90 | */ |
91 | + | ||
91 | /** | 92 | /** |
92 | * Represents data model node to maintain information defined in YANG case. | 93 | * Represents data model node to maintain information defined in YANG case. |
93 | */ | 94 | */ |
94 | -public class YangCase extends YangNode | 95 | +public class YangCase |
96 | + extends YangNode | ||
95 | implements YangLeavesHolder, YangCommonInfo, Parsable, CollisionDetector, YangAugmentationHolder { | 97 | implements YangLeavesHolder, YangCommonInfo, Parsable, CollisionDetector, YangAugmentationHolder { |
96 | 98 | ||
97 | /** | 99 | /** |
... | @@ -188,7 +190,8 @@ public class YangCase extends YangNode | ... | @@ -188,7 +190,8 @@ public class YangCase extends YangNode |
188 | * | 190 | * |
189 | * @param leafsList the list of leaf to set | 191 | * @param leafsList the list of leaf to set |
190 | */ | 192 | */ |
191 | - private void setListOfLeaf(List<YangLeaf> leafsList) { | 193 | + @Override |
194 | + public void setListOfLeaf(List<YangLeaf> leafsList) { | ||
192 | listOfLeaf = leafsList; | 195 | listOfLeaf = leafsList; |
193 | } | 196 | } |
194 | 197 | ||
... | @@ -221,7 +224,8 @@ public class YangCase extends YangNode | ... | @@ -221,7 +224,8 @@ public class YangCase extends YangNode |
221 | * | 224 | * |
222 | * @param listOfLeafList the list of leaf-list to set | 225 | * @param listOfLeafList the list of leaf-list to set |
223 | */ | 226 | */ |
224 | - private void setListOfLeafList(List<YangLeafList> listOfLeafList) { | 227 | + @Override |
228 | + public void setListOfLeafList(List<YangLeafList> listOfLeafList) { | ||
225 | this.listOfLeafList = listOfLeafList; | 229 | this.listOfLeafList = listOfLeafList; |
226 | } | 230 | } |
227 | 231 | ||
... | @@ -295,7 +299,8 @@ public class YangCase extends YangNode | ... | @@ -295,7 +299,8 @@ public class YangCase extends YangNode |
295 | * @throws DataModelException a violation of data model rules | 299 | * @throws DataModelException a violation of data model rules |
296 | */ | 300 | */ |
297 | @Override | 301 | @Override |
298 | - public void validateDataOnEntry() throws DataModelException { | 302 | + public void validateDataOnEntry() |
303 | + throws DataModelException { | ||
299 | // TODO auto-generated method stub, to be implemented by parser | 304 | // TODO auto-generated method stub, to be implemented by parser |
300 | } | 305 | } |
301 | 306 | ||
... | @@ -305,12 +310,14 @@ public class YangCase extends YangNode | ... | @@ -305,12 +310,14 @@ public class YangCase extends YangNode |
305 | * @throws DataModelException a violation of data model rules | 310 | * @throws DataModelException a violation of data model rules |
306 | */ | 311 | */ |
307 | @Override | 312 | @Override |
308 | - public void validateDataOnExit() throws DataModelException { | 313 | + public void validateDataOnExit() |
314 | + throws DataModelException { | ||
309 | // TODO auto-generated method stub, to be implemented by parser | 315 | // TODO auto-generated method stub, to be implemented by parser |
310 | } | 316 | } |
311 | 317 | ||
312 | @Override | 318 | @Override |
313 | - public void detectCollidingChild(String identifierName, YangConstructType dataType) throws DataModelException { | 319 | + public void detectCollidingChild(String identifierName, YangConstructType dataType) |
320 | + throws DataModelException { | ||
314 | if (!(getParent() instanceof YangChoice)) { | 321 | if (!(getParent() instanceof YangChoice)) { |
315 | throw new DataModelException("Internal Data Model Tree Error: Invalid/Missing holder in case " + | 322 | throw new DataModelException("Internal Data Model Tree Error: Invalid/Missing holder in case " + |
316 | getName()); | 323 | getName()); |
... | @@ -320,7 +327,8 @@ public class YangCase extends YangNode | ... | @@ -320,7 +327,8 @@ public class YangCase extends YangNode |
320 | } | 327 | } |
321 | 328 | ||
322 | @Override | 329 | @Override |
323 | - public void detectSelfCollision(String identifierName, YangConstructType dataType) throws DataModelException { | 330 | + public void detectSelfCollision(String identifierName, YangConstructType dataType) |
331 | + throws DataModelException { | ||
324 | 332 | ||
325 | if (dataType == CASE_DATA) { | 333 | if (dataType == CASE_DATA) { |
326 | if (getName().equals(identifierName)) { | 334 | if (getName().equals(identifierName)) { | ... | ... |
... | @@ -87,7 +87,8 @@ import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCol | ... | @@ -87,7 +87,8 @@ import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCol |
87 | /** | 87 | /** |
88 | * Represents data model node to maintain information defined in YANG container. | 88 | * Represents data model node to maintain information defined in YANG container. |
89 | */ | 89 | */ |
90 | -public class YangContainer extends YangNode | 90 | +public class YangContainer |
91 | + extends YangNode | ||
91 | implements YangLeavesHolder, YangCommonInfo, Parsable, CollisionDetector, YangAugmentationHolder { | 92 | implements YangLeavesHolder, YangCommonInfo, Parsable, CollisionDetector, YangAugmentationHolder { |
92 | 93 | ||
93 | /** | 94 | /** |
... | @@ -211,7 +212,8 @@ public class YangContainer extends YangNode | ... | @@ -211,7 +212,8 @@ public class YangContainer extends YangNode |
211 | * | 212 | * |
212 | * @param leafsList the list of leaf to set | 213 | * @param leafsList the list of leaf to set |
213 | */ | 214 | */ |
214 | - private void setListOfLeaf(List<YangLeaf> leafsList) { | 215 | + @Override |
216 | + public void setListOfLeaf(List<YangLeaf> leafsList) { | ||
215 | listOfLeaf = leafsList; | 217 | listOfLeaf = leafsList; |
216 | } | 218 | } |
217 | 219 | ||
... | @@ -245,7 +247,8 @@ public class YangContainer extends YangNode | ... | @@ -245,7 +247,8 @@ public class YangContainer extends YangNode |
245 | * | 247 | * |
246 | * @param listOfLeafList the list of leaf-list to set | 248 | * @param listOfLeafList the list of leaf-list to set |
247 | */ | 249 | */ |
248 | - private void setListOfLeafList(List<YangLeafList> listOfLeafList) { | 250 | + @Override |
251 | + public void setListOfLeafList(List<YangLeafList> listOfLeafList) { | ||
249 | this.listOfLeafList = listOfLeafList; | 252 | this.listOfLeafList = listOfLeafList; |
250 | } | 253 | } |
251 | 254 | ||
... | @@ -338,7 +341,8 @@ public class YangContainer extends YangNode | ... | @@ -338,7 +341,8 @@ public class YangContainer extends YangNode |
338 | * @throws DataModelException a violation of data model rules | 341 | * @throws DataModelException a violation of data model rules |
339 | */ | 342 | */ |
340 | @Override | 343 | @Override |
341 | - public void validateDataOnEntry() throws DataModelException { | 344 | + public void validateDataOnEntry() |
345 | + throws DataModelException { | ||
342 | // TODO auto-generated method stub, to be implemented by parser | 346 | // TODO auto-generated method stub, to be implemented by parser |
343 | } | 347 | } |
344 | 348 | ||
... | @@ -348,7 +352,8 @@ public class YangContainer extends YangNode | ... | @@ -348,7 +352,8 @@ public class YangContainer extends YangNode |
348 | * @throws DataModelException a violation of data model rules | 352 | * @throws DataModelException a violation of data model rules |
349 | */ | 353 | */ |
350 | @Override | 354 | @Override |
351 | - public void validateDataOnExit() throws DataModelException { | 355 | + public void validateDataOnExit() |
356 | + throws DataModelException { | ||
352 | List<YangLeaf> leaves = getListOfLeaf(); | 357 | List<YangLeaf> leaves = getListOfLeaf(); |
353 | List<YangLeafList> leafLists = getListOfLeafList(); | 358 | List<YangLeafList> leafLists = getListOfLeafList(); |
354 | 359 | ||
... | @@ -397,7 +402,8 @@ public class YangContainer extends YangNode | ... | @@ -397,7 +402,8 @@ public class YangContainer extends YangNode |
397 | * @param leafLists list of leaf-list attributes of container | 402 | * @param leafLists list of leaf-list attributes of container |
398 | * @throws DataModelException a violation of data model rules | 403 | * @throws DataModelException a violation of data model rules |
399 | */ | 404 | */ |
400 | - private void validateConfig(List<YangLeaf> leaves, List<YangLeafList> leafLists) throws DataModelException { | 405 | + private void validateConfig(List<YangLeaf> leaves, List<YangLeafList> leafLists) |
406 | + throws DataModelException { | ||
401 | 407 | ||
402 | /* | 408 | /* |
403 | * If a node has "config" set to "false", no node underneath it can have | 409 | * If a node has "config" set to "false", no node underneath it can have |
... | @@ -423,13 +429,15 @@ public class YangContainer extends YangNode | ... | @@ -423,13 +429,15 @@ public class YangContainer extends YangNode |
423 | } | 429 | } |
424 | 430 | ||
425 | @Override | 431 | @Override |
426 | - public void detectCollidingChild(String identifierName, YangConstructType dataType) throws DataModelException { | 432 | + public void detectCollidingChild(String identifierName, YangConstructType dataType) |
433 | + throws DataModelException { | ||
427 | // Asks helper to detect colliding child. | 434 | // Asks helper to detect colliding child. |
428 | detectCollidingChildUtil(identifierName, dataType, this); | 435 | detectCollidingChildUtil(identifierName, dataType, this); |
429 | } | 436 | } |
430 | 437 | ||
431 | @Override | 438 | @Override |
432 | - public void detectSelfCollision(String identifierName, YangConstructType dataType) throws DataModelException { | 439 | + public void detectSelfCollision(String identifierName, YangConstructType dataType) |
440 | + throws DataModelException { | ||
433 | if (getName().equals(identifierName)) { | 441 | if (getName().equals(identifierName)) { |
434 | throw new DataModelException("YANG file error: Duplicate input identifier detected, same as container \"" | 442 | throw new DataModelException("YANG file error: Duplicate input identifier detected, same as container \"" |
435 | + getName() + "\""); | 443 | + getName() + "\""); | ... | ... |
... | @@ -17,7 +17,8 @@ | ... | @@ -17,7 +17,8 @@ |
17 | package org.onosproject.yangutils.datamodel; | 17 | package org.onosproject.yangutils.datamodel; |
18 | 18 | ||
19 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 19 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; |
20 | -import org.onosproject.yangutils.linker.impl.ResolvableStatus; | 20 | +import org.onosproject.yangutils.linker.ResolvableStatus; |
21 | + | ||
21 | import com.google.common.base.Strings; | 22 | import com.google.common.base.Strings; |
22 | 23 | ||
23 | import static org.onosproject.yangutils.datamodel.YangDataTypes.BINARY; | 24 | import static org.onosproject.yangutils.datamodel.YangDataTypes.BINARY; |
... | @@ -30,8 +31,8 @@ import static org.onosproject.yangutils.datamodel.YangDataTypes.IDENTITYREF; | ... | @@ -30,8 +31,8 @@ import static org.onosproject.yangutils.datamodel.YangDataTypes.IDENTITYREF; |
30 | import static org.onosproject.yangutils.datamodel.YangDataTypes.LEAFREF; | 31 | import static org.onosproject.yangutils.datamodel.YangDataTypes.LEAFREF; |
31 | import static org.onosproject.yangutils.datamodel.YangDataTypes.STRING; | 32 | import static org.onosproject.yangutils.datamodel.YangDataTypes.STRING; |
32 | import static org.onosproject.yangutils.datamodel.YangDataTypes.UNION; | 33 | import static org.onosproject.yangutils.datamodel.YangDataTypes.UNION; |
33 | -import static org.onosproject.yangutils.linker.impl.ResolvableStatus.INTRA_FILE_RESOLVED; | 34 | +import static org.onosproject.yangutils.linker.ResolvableStatus.INTRA_FILE_RESOLVED; |
34 | -import static org.onosproject.yangutils.linker.impl.ResolvableStatus.RESOLVED; | 35 | +import static org.onosproject.yangutils.linker.ResolvableStatus.RESOLVED; |
35 | import static org.onosproject.yangutils.utils.RestrictionResolver.isOfRangeRestrictedType; | 36 | import static org.onosproject.yangutils.utils.RestrictionResolver.isOfRangeRestrictedType; |
36 | import static org.onosproject.yangutils.utils.RestrictionResolver.processLengthRestriction; | 37 | import static org.onosproject.yangutils.utils.RestrictionResolver.processLengthRestriction; |
37 | import static org.onosproject.yangutils.utils.RestrictionResolver.processRangeRestriction; | 38 | import static org.onosproject.yangutils.utils.RestrictionResolver.processRangeRestriction; |
... | @@ -41,7 +42,8 @@ import static org.onosproject.yangutils.utils.RestrictionResolver.processRangeRe | ... | @@ -41,7 +42,8 @@ import static org.onosproject.yangutils.utils.RestrictionResolver.processRangeRe |
41 | * | 42 | * |
42 | * @param <T> extended information. | 43 | * @param <T> extended information. |
43 | */ | 44 | */ |
44 | -public class YangDerivedInfo<T> implements LocationInfo { | 45 | +public class YangDerivedInfo<T> |
46 | + implements LocationInfo, Cloneable { | ||
45 | 47 | ||
46 | /** | 48 | /** |
47 | * YANG typedef reference. | 49 | * YANG typedef reference. |
... | @@ -224,8 +226,11 @@ public class YangDerivedInfo<T> implements LocationInfo { | ... | @@ -224,8 +226,11 @@ public class YangDerivedInfo<T> implements LocationInfo { |
224 | * @return resolution status | 226 | * @return resolution status |
225 | * @throws DataModelException a violation in data mode rule | 227 | * @throws DataModelException a violation in data mode rule |
226 | */ | 228 | */ |
227 | - public ResolvableStatus resolve() throws DataModelException { | 229 | + public ResolvableStatus resolve() |
230 | + throws DataModelException { | ||
231 | + | ||
228 | YangType<?> baseType = getReferredTypeDef().getTypeDefBaseType(); | 232 | YangType<?> baseType = getReferredTypeDef().getTypeDefBaseType(); |
233 | + | ||
229 | /* | 234 | /* |
230 | * Checks the data type of the referred typedef, if it's derived, | 235 | * Checks the data type of the referred typedef, if it's derived, |
231 | * obtain effective built-in type and restrictions from it's derived | 236 | * obtain effective built-in type and restrictions from it's derived |
... | @@ -238,6 +243,7 @@ public class YangDerivedInfo<T> implements LocationInfo { | ... | @@ -238,6 +243,7 @@ public class YangDerivedInfo<T> implements LocationInfo { |
238 | if (baseType.getResolvableStatus() != INTRA_FILE_RESOLVED && baseType.getResolvableStatus() != RESOLVED) { | 243 | if (baseType.getResolvableStatus() != INTRA_FILE_RESOLVED && baseType.getResolvableStatus() != RESOLVED) { |
239 | throw new DataModelException("Linker Error: Referred typedef is not resolved for type."); | 244 | throw new DataModelException("Linker Error: Referred typedef is not resolved for type."); |
240 | } | 245 | } |
246 | + | ||
241 | /* | 247 | /* |
242 | * Check if the referred typedef is intra file resolved, if yes sets | 248 | * Check if the referred typedef is intra file resolved, if yes sets |
243 | * current status also to intra file resolved . | 249 | * current status also to intra file resolved . |
... | @@ -401,6 +407,7 @@ public class YangDerivedInfo<T> implements LocationInfo { | ... | @@ -401,6 +407,7 @@ public class YangDerivedInfo<T> implements LocationInfo { |
401 | } | 407 | } |
402 | } | 408 | } |
403 | } | 409 | } |
410 | + | ||
404 | /* | 411 | /* |
405 | * Check if the data type is the one which can't be restricted, in | 412 | * Check if the data type is the one which can't be restricted, in |
406 | * this case check whether no self restrictions should be present. | 413 | * this case check whether no self restrictions should be present. |
... | @@ -414,6 +421,7 @@ public class YangDerivedInfo<T> implements LocationInfo { | ... | @@ -414,6 +421,7 @@ public class YangDerivedInfo<T> implements LocationInfo { |
414 | throw new DataModelException("YANG file error: Restrictions can't be applied to a given type"); | 421 | throw new DataModelException("YANG file error: Restrictions can't be applied to a given type"); |
415 | } | 422 | } |
416 | } | 423 | } |
424 | + | ||
417 | // Throw exception for unsupported types | 425 | // Throw exception for unsupported types |
418 | throw new DataModelException("Linker error: Unable to process the derived type."); | 426 | throw new DataModelException("Linker error: Unable to process the derived type."); |
419 | } | 427 | } |
... | @@ -424,7 +432,8 @@ public class YangDerivedInfo<T> implements LocationInfo { | ... | @@ -424,7 +432,8 @@ public class YangDerivedInfo<T> implements LocationInfo { |
424 | * @param refStringRestriction referred string restriction of typedef | 432 | * @param refStringRestriction referred string restriction of typedef |
425 | * @throws DataModelException a violation in data model rule | 433 | * @throws DataModelException a violation in data model rule |
426 | */ | 434 | */ |
427 | - private void resolveStringRestriction(YangStringRestriction refStringRestriction) throws DataModelException { | 435 | + private void resolveStringRestriction(YangStringRestriction refStringRestriction) |
436 | + throws DataModelException { | ||
428 | YangStringRestriction curStringRestriction = null; | 437 | YangStringRestriction curStringRestriction = null; |
429 | YangRangeRestriction refRangeRestriction = null; | 438 | YangRangeRestriction refRangeRestriction = null; |
430 | YangPatternRestriction refPatternRestriction = null; | 439 | YangPatternRestriction refPatternRestriction = null; |
... | @@ -522,7 +531,8 @@ public class YangDerivedInfo<T> implements LocationInfo { | ... | @@ -522,7 +531,8 @@ public class YangDerivedInfo<T> implements LocationInfo { |
522 | * @return resolved length restriction | 531 | * @return resolved length restriction |
523 | * @throws DataModelException a violation in data model rule | 532 | * @throws DataModelException a violation in data model rule |
524 | */ | 533 | */ |
525 | - private YangRangeRestriction resolveLengthRestriction(YangRangeRestriction refLengthRestriction) throws | 534 | + private YangRangeRestriction resolveLengthRestriction(YangRangeRestriction refLengthRestriction) |
535 | + throws | ||
526 | DataModelException { | 536 | DataModelException { |
527 | 537 | ||
528 | /* | 538 | /* |
... | @@ -572,7 +582,8 @@ public class YangDerivedInfo<T> implements LocationInfo { | ... | @@ -572,7 +582,8 @@ public class YangDerivedInfo<T> implements LocationInfo { |
572 | * @param curRestriction self restriction | 582 | * @param curRestriction self restriction |
573 | */ | 583 | */ |
574 | private void resolveLengthAndRangeRestriction(YangRangeRestriction refRestriction, | 584 | private void resolveLengthAndRangeRestriction(YangRangeRestriction refRestriction, |
575 | - YangRangeRestriction curRestriction) throws DataModelException { | 585 | + YangRangeRestriction curRestriction) |
586 | + throws DataModelException { | ||
576 | for (Object curInterval : curRestriction.getAscendingRangeIntervals()) { | 587 | for (Object curInterval : curRestriction.getAscendingRangeIntervals()) { |
577 | if (!(curInterval instanceof YangRangeInterval)) { | 588 | if (!(curInterval instanceof YangRangeInterval)) { |
578 | throw new DataModelException("Linker error: Current range intervals not processed correctly."); | 589 | throw new DataModelException("Linker error: Current range intervals not processed correctly."); |
... | @@ -594,7 +605,8 @@ public class YangDerivedInfo<T> implements LocationInfo { | ... | @@ -594,7 +605,8 @@ public class YangDerivedInfo<T> implements LocationInfo { |
594 | * @param refRangeRestriction referred range restriction of typedef | 605 | * @param refRangeRestriction referred range restriction of typedef |
595 | * @throws DataModelException a violation in data model rule | 606 | * @throws DataModelException a violation in data model rule |
596 | */ | 607 | */ |
597 | - private void resolveRangeRestriction(YangRangeRestriction refRangeRestriction) throws DataModelException { | 608 | + private void resolveRangeRestriction(YangRangeRestriction refRangeRestriction) |
609 | + throws DataModelException { | ||
598 | 610 | ||
599 | /* | 611 | /* |
600 | * Check that string restriction should be null when built-in type is | 612 | * Check that string restriction should be null when built-in type is | ... | ... |
... | @@ -31,7 +31,9 @@ import org.onosproject.yangutils.utils.YangConstructType; | ... | @@ -31,7 +31,9 @@ import org.onosproject.yangutils.utils.YangConstructType; |
31 | /** | 31 | /** |
32 | * Represents the enumeration data type information. | 32 | * Represents the enumeration data type information. |
33 | */ | 33 | */ |
34 | -public class YangEnumeration extends YangNode implements Parsable, CollisionDetector { | 34 | +public class YangEnumeration |
35 | + extends YangNode | ||
36 | + implements Parsable, CollisionDetector { | ||
35 | 37 | ||
36 | // Enumeration info set. | 38 | // Enumeration info set. |
37 | private SortedSet<YangEnum> enumSet; | 39 | private SortedSet<YangEnum> enumSet; |
... | @@ -71,7 +73,8 @@ public class YangEnumeration extends YangNode implements Parsable, CollisionDete | ... | @@ -71,7 +73,8 @@ public class YangEnumeration extends YangNode implements Parsable, CollisionDete |
71 | * @param enumInfo the ENUM information to be added | 73 | * @param enumInfo the ENUM information to be added |
72 | * @throws DataModelException due to violation in data model rules | 74 | * @throws DataModelException due to violation in data model rules |
73 | */ | 75 | */ |
74 | - public void addEnumInfo(YangEnum enumInfo) throws DataModelException { | 76 | + public void addEnumInfo(YangEnum enumInfo) |
77 | + throws DataModelException { | ||
75 | if (!getEnumSet().add(enumInfo)) { | 78 | if (!getEnumSet().add(enumInfo)) { |
76 | throw new DataModelException("YANG ENUM already exists"); | 79 | throw new DataModelException("YANG ENUM already exists"); |
77 | } | 80 | } |
... | @@ -113,7 +116,8 @@ public class YangEnumeration extends YangNode implements Parsable, CollisionDete | ... | @@ -113,7 +116,8 @@ public class YangEnumeration extends YangNode implements Parsable, CollisionDete |
113 | * @throws DataModelException a violation of data model rules | 116 | * @throws DataModelException a violation of data model rules |
114 | */ | 117 | */ |
115 | @Override | 118 | @Override |
116 | - public void validateDataOnEntry() throws DataModelException { | 119 | + public void validateDataOnEntry() |
120 | + throws DataModelException { | ||
117 | // TODO auto-generated method stub, to be implemented by parser | 121 | // TODO auto-generated method stub, to be implemented by parser |
118 | } | 122 | } |
119 | 123 | ||
... | @@ -123,21 +127,24 @@ public class YangEnumeration extends YangNode implements Parsable, CollisionDete | ... | @@ -123,21 +127,24 @@ public class YangEnumeration extends YangNode implements Parsable, CollisionDete |
123 | * @throws DataModelException a violation of data model rules | 127 | * @throws DataModelException a violation of data model rules |
124 | */ | 128 | */ |
125 | @Override | 129 | @Override |
126 | - public void validateDataOnExit() throws DataModelException { | 130 | + public void validateDataOnExit() |
131 | + throws DataModelException { | ||
127 | // TODO auto-generated method stub, to be implemented by parser | 132 | // TODO auto-generated method stub, to be implemented by parser |
128 | } | 133 | } |
129 | 134 | ||
130 | @Override | 135 | @Override |
131 | - public void detectCollidingChild(String identifierName, YangConstructType dataType) throws DataModelException { | 136 | + public void detectCollidingChild(String identifierName, YangConstructType dataType) |
137 | + throws DataModelException { | ||
132 | /* | 138 | /* |
133 | - Do nothing.The implementation for this is not required. | 139 | + Do nothing, since it is not part of the schema tree, it is only type of an existing node in schema tree. |
134 | */ | 140 | */ |
135 | } | 141 | } |
136 | 142 | ||
137 | @Override | 143 | @Override |
138 | - public void detectSelfCollision(String identifierName, YangConstructType dataType) throws DataModelException { | 144 | + public void detectSelfCollision(String identifierName, YangConstructType dataType) |
145 | + throws DataModelException { | ||
139 | /* | 146 | /* |
140 | - Do nothing.The implementation for this is not required. | 147 | + Do nothing, since it is not part of the schema tree, it is only type of an existing node in schema tree. |
141 | */ | 148 | */ |
142 | } | 149 | } |
143 | } | 150 | } | ... | ... |
... | @@ -77,7 +77,8 @@ import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCol | ... | @@ -77,7 +77,8 @@ import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCol |
77 | /** | 77 | /** |
78 | * Represents data model node to maintain information defined in YANG grouping. | 78 | * Represents data model node to maintain information defined in YANG grouping. |
79 | */ | 79 | */ |
80 | -public class YangGrouping extends YangNode | 80 | +public class YangGrouping |
81 | + extends YangNode | ||
81 | implements YangLeavesHolder, YangCommonInfo, Parsable, CollisionDetector { | 82 | implements YangLeavesHolder, YangCommonInfo, Parsable, CollisionDetector { |
82 | 83 | ||
83 | /** | 84 | /** |
... | @@ -174,7 +175,8 @@ public class YangGrouping extends YangNode | ... | @@ -174,7 +175,8 @@ public class YangGrouping extends YangNode |
174 | * | 175 | * |
175 | * @param leafsList the list of leaf to set | 176 | * @param leafsList the list of leaf to set |
176 | */ | 177 | */ |
177 | - private void setListOfLeaf(List<YangLeaf> leafsList) { | 178 | + @Override |
179 | + public void setListOfLeaf(List<YangLeaf> leafsList) { | ||
178 | listOfLeaf = leafsList; | 180 | listOfLeaf = leafsList; |
179 | } | 181 | } |
180 | 182 | ||
... | @@ -203,7 +205,8 @@ public class YangGrouping extends YangNode | ... | @@ -203,7 +205,8 @@ public class YangGrouping extends YangNode |
203 | * | 205 | * |
204 | * @param listOfLeafList the list of leaf-list to set | 206 | * @param listOfLeafList the list of leaf-list to set |
205 | */ | 207 | */ |
206 | - private void setListOfLeafList(List<YangLeafList> listOfLeafList) { | 208 | + @Override |
209 | + public void setListOfLeafList(List<YangLeafList> listOfLeafList) { | ||
207 | this.listOfLeafList = listOfLeafList; | 210 | this.listOfLeafList = listOfLeafList; |
208 | } | 211 | } |
209 | 212 | ||
... | @@ -273,7 +276,8 @@ public class YangGrouping extends YangNode | ... | @@ -273,7 +276,8 @@ public class YangGrouping extends YangNode |
273 | * @throws DataModelException a violation of data model rules | 276 | * @throws DataModelException a violation of data model rules |
274 | */ | 277 | */ |
275 | @Override | 278 | @Override |
276 | - public void validateDataOnEntry() throws DataModelException { | 279 | + public void validateDataOnEntry() |
280 | + throws DataModelException { | ||
277 | // TODO auto-generated method stub, to be implemented by parser | 281 | // TODO auto-generated method stub, to be implemented by parser |
278 | } | 282 | } |
279 | 283 | ||
... | @@ -283,7 +287,8 @@ public class YangGrouping extends YangNode | ... | @@ -283,7 +287,8 @@ public class YangGrouping extends YangNode |
283 | * @throws DataModelException a violation of data model rules | 287 | * @throws DataModelException a violation of data model rules |
284 | */ | 288 | */ |
285 | @Override | 289 | @Override |
286 | - public void validateDataOnExit() throws DataModelException { | 290 | + public void validateDataOnExit() |
291 | + throws DataModelException { | ||
287 | // TODO auto-generated method stub, to be implemented by parser | 292 | // TODO auto-generated method stub, to be implemented by parser |
288 | } | 293 | } |
289 | 294 | ||
... | @@ -299,13 +304,15 @@ public class YangGrouping extends YangNode | ... | @@ -299,13 +304,15 @@ public class YangGrouping extends YangNode |
299 | * module. | 304 | * module. |
300 | */ | 305 | */ |
301 | @Override | 306 | @Override |
302 | - public void detectCollidingChild(String identifierName, YangConstructType dataType) throws DataModelException { | 307 | + public void detectCollidingChild(String identifierName, YangConstructType dataType) |
308 | + throws DataModelException { | ||
303 | // Asks helper to detect colliding child. | 309 | // Asks helper to detect colliding child. |
304 | detectCollidingChildUtil(identifierName, dataType, this); | 310 | detectCollidingChildUtil(identifierName, dataType, this); |
305 | } | 311 | } |
306 | 312 | ||
307 | @Override | 313 | @Override |
308 | - public void detectSelfCollision(String identifierName, YangConstructType dataType) throws DataModelException { | 314 | + public void detectSelfCollision(String identifierName, YangConstructType dataType) |
315 | + throws DataModelException { | ||
309 | if (getName().equals(identifierName)) { | 316 | if (getName().equals(identifierName)) { |
310 | throw new DataModelException("YANG file error: Duplicate input identifier detected, same as grouping \"" + | 317 | throw new DataModelException("YANG file error: Duplicate input identifier detected, same as grouping \"" + |
311 | getName() + "\""); | 318 | getName() + "\""); | ... | ... |
... | @@ -68,7 +68,8 @@ import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCol | ... | @@ -68,7 +68,8 @@ import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCol |
68 | /** | 68 | /** |
69 | * Represents data model node to maintain information defined in YANG input. | 69 | * Represents data model node to maintain information defined in YANG input. |
70 | */ | 70 | */ |
71 | -public class YangInput extends YangNode | 71 | +public class YangInput |
72 | + extends YangNode | ||
72 | implements YangLeavesHolder, Parsable, CollisionDetector, YangAugmentationHolder { | 73 | implements YangLeavesHolder, Parsable, CollisionDetector, YangAugmentationHolder { |
73 | 74 | ||
74 | /** | 75 | /** |
... | @@ -96,13 +97,15 @@ public class YangInput extends YangNode | ... | @@ -96,13 +97,15 @@ public class YangInput extends YangNode |
96 | } | 97 | } |
97 | 98 | ||
98 | @Override | 99 | @Override |
99 | - public void detectCollidingChild(String identifierName, YangConstructType dataType) throws DataModelException { | 100 | + public void detectCollidingChild(String identifierName, YangConstructType dataType) |
101 | + throws DataModelException { | ||
100 | // Detect colliding child. | 102 | // Detect colliding child. |
101 | detectCollidingChildUtil(identifierName, dataType, this); | 103 | detectCollidingChildUtil(identifierName, dataType, this); |
102 | } | 104 | } |
103 | 105 | ||
104 | @Override | 106 | @Override |
105 | - public void detectSelfCollision(String identifierName, YangConstructType dataType) throws DataModelException { | 107 | + public void detectSelfCollision(String identifierName, YangConstructType dataType) |
108 | + throws DataModelException { | ||
106 | if (this.getName().equals(identifierName)) { | 109 | if (this.getName().equals(identifierName)) { |
107 | throw new DataModelException("YANG file error: Duplicate input identifier detected, same as input \"" | 110 | throw new DataModelException("YANG file error: Duplicate input identifier detected, same as input \"" |
108 | + this.getName() + "\""); | 111 | + this.getName() + "\""); |
... | @@ -115,12 +118,14 @@ public class YangInput extends YangNode | ... | @@ -115,12 +118,14 @@ public class YangInput extends YangNode |
115 | } | 118 | } |
116 | 119 | ||
117 | @Override | 120 | @Override |
118 | - public void validateDataOnEntry() throws DataModelException { | 121 | + public void validateDataOnEntry() |
122 | + throws DataModelException { | ||
119 | //TODO: implement the method. | 123 | //TODO: implement the method. |
120 | } | 124 | } |
121 | 125 | ||
122 | @Override | 126 | @Override |
123 | - public void validateDataOnExit() throws DataModelException { | 127 | + public void validateDataOnExit() |
128 | + throws DataModelException { | ||
124 | //TODO: implement the method. | 129 | //TODO: implement the method. |
125 | } | 130 | } |
126 | 131 | ||
... | @@ -130,6 +135,12 @@ public class YangInput extends YangNode | ... | @@ -130,6 +135,12 @@ public class YangInput extends YangNode |
130 | } | 135 | } |
131 | 136 | ||
132 | @Override | 137 | @Override |
138 | + public void setListOfLeaf(List<YangLeaf> leafsList) { | ||
139 | + listOfLeaf = leafsList; | ||
140 | + } | ||
141 | + | ||
142 | + | ||
143 | + @Override | ||
133 | public void addLeaf(YangLeaf leaf) { | 144 | public void addLeaf(YangLeaf leaf) { |
134 | getListOfLeaf().add(leaf); | 145 | getListOfLeaf().add(leaf); |
135 | } | 146 | } |
... | @@ -140,6 +151,11 @@ public class YangInput extends YangNode | ... | @@ -140,6 +151,11 @@ public class YangInput extends YangNode |
140 | } | 151 | } |
141 | 152 | ||
142 | @Override | 153 | @Override |
154 | + public void setListOfLeafList(List<YangLeafList> listOfLeafList) { | ||
155 | + this.listOfLeafList = listOfLeafList; | ||
156 | + } | ||
157 | + | ||
158 | + @Override | ||
143 | public void addLeafList(YangLeafList leafList) { | 159 | public void addLeafList(YangLeafList leafList) { |
144 | getListOfLeafList().add(leafList); | 160 | getListOfLeafList().add(leafList); |
145 | } | 161 | } | ... | ... |
... | @@ -58,7 +58,7 @@ import org.onosproject.yangutils.utils.YangConstructType; | ... | @@ -58,7 +58,7 @@ import org.onosproject.yangutils.utils.YangConstructType; |
58 | * Represents leaf data represented in YANG. | 58 | * Represents leaf data represented in YANG. |
59 | */ | 59 | */ |
60 | public class YangLeaf | 60 | public class YangLeaf |
61 | - implements YangCommonInfo, Parsable { | 61 | + implements YangCommonInfo, Parsable, Cloneable { |
62 | 62 | ||
63 | /** | 63 | /** |
64 | * Name of leaf. | 64 | * Name of leaf. |
... | @@ -107,6 +107,11 @@ public class YangLeaf | ... | @@ -107,6 +107,11 @@ public class YangLeaf |
107 | private String defaultValueInString; | 107 | private String defaultValueInString; |
108 | 108 | ||
109 | /** | 109 | /** |
110 | + * YANG Node in which the leaf is contained. | ||
111 | + */ | ||
112 | + YangLeavesHolder containedIn; | ||
113 | + | ||
114 | + /** | ||
110 | * Creates a YANG leaf. | 115 | * Creates a YANG leaf. |
111 | */ | 116 | */ |
112 | public YangLeaf() { | 117 | public YangLeaf() { |
... | @@ -281,6 +286,30 @@ public class YangLeaf | ... | @@ -281,6 +286,30 @@ public class YangLeaf |
281 | } | 286 | } |
282 | 287 | ||
283 | /** | 288 | /** |
289 | + * Retrieves the YANG node in which the leaf is defined. | ||
290 | + * | ||
291 | + * @return the YANG node in which the leaf is defined | ||
292 | + */ | ||
293 | + public YangLeavesHolder getContainedIn() { | ||
294 | + return containedIn; | ||
295 | + } | ||
296 | + | ||
297 | + /** | ||
298 | + * Assigns the YANG node in which the leaf is defined. | ||
299 | + * | ||
300 | + * @param containedIn the YANG node in which the leaf is defined | ||
301 | + */ | ||
302 | + public void setContainedIn(YangLeavesHolder containedIn) { | ||
303 | + this.containedIn = containedIn; | ||
304 | + } | ||
305 | + | ||
306 | + @Override | ||
307 | + public YangLeaf clone() | ||
308 | + throws CloneNotSupportedException { | ||
309 | + return (YangLeaf) super.clone(); | ||
310 | + } | ||
311 | + | ||
312 | + /** | ||
284 | * Returns the type of the parsed data. | 313 | * Returns the type of the parsed data. |
285 | * | 314 | * |
286 | * @return returns LEAF_DATA | 315 | * @return returns LEAF_DATA | ... | ... |
... | @@ -54,7 +54,7 @@ import org.onosproject.yangutils.utils.YangConstructType; | ... | @@ -54,7 +54,7 @@ import org.onosproject.yangutils.utils.YangConstructType; |
54 | * Represents leaf-list data represented in YANG. | 54 | * Represents leaf-list data represented in YANG. |
55 | */ | 55 | */ |
56 | public class YangLeafList | 56 | public class YangLeafList |
57 | - implements YangCommonInfo, Parsable { | 57 | + implements YangCommonInfo, Parsable, Cloneable { |
58 | 58 | ||
59 | /** | 59 | /** |
60 | * Name of leaf-list. | 60 | * Name of leaf-list. |
... | @@ -124,6 +124,11 @@ public class YangLeafList | ... | @@ -124,6 +124,11 @@ public class YangLeafList |
124 | private YangType<?> dataType; | 124 | private YangType<?> dataType; |
125 | 125 | ||
126 | /** | 126 | /** |
127 | + * YANG Node in which the leaf is contained. | ||
128 | + */ | ||
129 | + YangLeavesHolder containedIn; | ||
130 | + | ||
131 | + /** | ||
127 | * Creates a YANG leaf-list. | 132 | * Creates a YANG leaf-list. |
128 | */ | 133 | */ |
129 | public YangLeafList() { | 134 | public YangLeafList() { |
... | @@ -298,6 +303,30 @@ public class YangLeafList | ... | @@ -298,6 +303,30 @@ public class YangLeafList |
298 | } | 303 | } |
299 | 304 | ||
300 | /** | 305 | /** |
306 | + * Retrieves the YANG node in which the leaf is defined. | ||
307 | + * | ||
308 | + * @return the YANG node in which the leaf is defined | ||
309 | + */ | ||
310 | + public YangLeavesHolder getContainedIn() { | ||
311 | + return containedIn; | ||
312 | + } | ||
313 | + | ||
314 | + /** | ||
315 | + * Assigns the YANG node in which the leaf is defined. | ||
316 | + * | ||
317 | + * @param containedIn the YANG node in which the leaf is defined | ||
318 | + */ | ||
319 | + public void setContainedIn(YangLeavesHolder containedIn) { | ||
320 | + this.containedIn = containedIn; | ||
321 | + } | ||
322 | + | ||
323 | + @Override | ||
324 | + public YangLeafList clone() | ||
325 | + throws CloneNotSupportedException { | ||
326 | + return (YangLeafList) super.clone(); | ||
327 | + } | ||
328 | + | ||
329 | + /** | ||
301 | * Returns the type of the parsed data. | 330 | * Returns the type of the parsed data. |
302 | * | 331 | * |
303 | * @return returns LEAF_LIST_DATA | 332 | * @return returns LEAF_LIST_DATA | ... | ... |
... | @@ -33,6 +33,13 @@ public interface YangLeavesHolder { | ... | @@ -33,6 +33,13 @@ public interface YangLeavesHolder { |
33 | List<YangLeaf> getListOfLeaf(); | 33 | List<YangLeaf> getListOfLeaf(); |
34 | 34 | ||
35 | /** | 35 | /** |
36 | + * Sets the list of leaves. | ||
37 | + * | ||
38 | + * @param leafsList the list of leaf to set | ||
39 | + */ | ||
40 | + void setListOfLeaf(List<YangLeaf> leafsList); | ||
41 | + | ||
42 | + /** | ||
36 | * Adds leaf in data holder like container / list. | 43 | * Adds leaf in data holder like container / list. |
37 | * | 44 | * |
38 | * @param leaf the leaf to be added | 45 | * @param leaf the leaf to be added |
... | @@ -47,6 +54,13 @@ public interface YangLeavesHolder { | ... | @@ -47,6 +54,13 @@ public interface YangLeavesHolder { |
47 | List<YangLeafList> getListOfLeafList(); | 54 | List<YangLeafList> getListOfLeafList(); |
48 | 55 | ||
49 | /** | 56 | /** |
57 | + * Sets the list of leaf-list. | ||
58 | + * | ||
59 | + * @param listOfLeafList the list of leaf-list to set | ||
60 | + */ | ||
61 | + void setListOfLeafList(List<YangLeafList> listOfLeafList); | ||
62 | + | ||
63 | + /** | ||
50 | * Adds leaf-list in data holder like container / list. | 64 | * Adds leaf-list in data holder like container / list. |
51 | * | 65 | * |
52 | * @param leafList the leaf-list to be added | 66 | * @param leafList the leaf-list to be added | ... | ... |
... | @@ -67,7 +67,8 @@ import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCol | ... | @@ -67,7 +67,8 @@ import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCol |
67 | /** | 67 | /** |
68 | * Represents list data represented in YANG. | 68 | * Represents list data represented in YANG. |
69 | */ | 69 | */ |
70 | -public class YangList extends YangNode | 70 | +public class YangList |
71 | + extends YangNode | ||
71 | implements YangLeavesHolder, YangCommonInfo, Parsable, CollisionDetector, YangAugmentationHolder { | 72 | implements YangLeavesHolder, YangCommonInfo, Parsable, CollisionDetector, YangAugmentationHolder { |
72 | 73 | ||
73 | /** | 74 | /** |
... | @@ -254,7 +255,8 @@ public class YangList extends YangNode | ... | @@ -254,7 +255,8 @@ public class YangList extends YangNode |
254 | * @param key key field name. | 255 | * @param key key field name. |
255 | * @throws DataModelException a violation of data model rules | 256 | * @throws DataModelException a violation of data model rules |
256 | */ | 257 | */ |
257 | - public void addKey(String key) throws DataModelException { | 258 | + public void addKey(String key) |
259 | + throws DataModelException { | ||
258 | if (getKeyList() == null) { | 260 | if (getKeyList() == null) { |
259 | setKeyList(new LinkedList<String>()); | 261 | setKeyList(new LinkedList<String>()); |
260 | } | 262 | } |
... | @@ -282,7 +284,8 @@ public class YangList extends YangNode | ... | @@ -282,7 +284,8 @@ public class YangList extends YangNode |
282 | * | 284 | * |
283 | * @param leafsList the list of leaf to set | 285 | * @param leafsList the list of leaf to set |
284 | */ | 286 | */ |
285 | - private void setListOfLeaf(List<YangLeaf> leafsList) { | 287 | + @Override |
288 | + public void setListOfLeaf(List<YangLeaf> leafsList) { | ||
286 | listOfLeaf = leafsList; | 289 | listOfLeaf = leafsList; |
287 | } | 290 | } |
288 | 291 | ||
... | @@ -315,7 +318,8 @@ public class YangList extends YangNode | ... | @@ -315,7 +318,8 @@ public class YangList extends YangNode |
315 | * | 318 | * |
316 | * @param listOfLeafList the list of leaf-list to set | 319 | * @param listOfLeafList the list of leaf-list to set |
317 | */ | 320 | */ |
318 | - private void setListOfLeafList(List<YangLeafList> listOfLeafList) { | 321 | + @Override |
322 | + public void setListOfLeafList(List<YangLeafList> listOfLeafList) { | ||
319 | this.listOfLeafList = listOfLeafList; | 323 | this.listOfLeafList = listOfLeafList; |
320 | } | 324 | } |
321 | 325 | ||
... | @@ -425,7 +429,8 @@ public class YangList extends YangNode | ... | @@ -425,7 +429,8 @@ public class YangList extends YangNode |
425 | * @throws DataModelException a violation of data model rules | 429 | * @throws DataModelException a violation of data model rules |
426 | */ | 430 | */ |
427 | @Override | 431 | @Override |
428 | - public void validateDataOnEntry() throws DataModelException { | 432 | + public void validateDataOnEntry() |
433 | + throws DataModelException { | ||
429 | // TODO auto-generated method stub, to be implemented by parser | 434 | // TODO auto-generated method stub, to be implemented by parser |
430 | } | 435 | } |
431 | 436 | ||
... | @@ -435,7 +440,8 @@ public class YangList extends YangNode | ... | @@ -435,7 +440,8 @@ public class YangList extends YangNode |
435 | * @throws DataModelException a violation of data model rules | 440 | * @throws DataModelException a violation of data model rules |
436 | */ | 441 | */ |
437 | @Override | 442 | @Override |
438 | - public void validateDataOnExit() throws DataModelException { | 443 | + public void validateDataOnExit() |
444 | + throws DataModelException { | ||
439 | List<String> keys = getKeyList(); | 445 | List<String> keys = getKeyList(); |
440 | List<YangLeaf> leaves = getListOfLeaf(); | 446 | List<YangLeaf> leaves = getListOfLeaf(); |
441 | List<YangLeafList> leafLists = getListOfLeafList(); | 447 | List<YangLeafList> leafLists = getListOfLeafList(); |
... | @@ -493,7 +499,8 @@ public class YangList extends YangNode | ... | @@ -493,7 +499,8 @@ public class YangList extends YangNode |
493 | * @param leafLists list of leaf-list attributes of YANG list | 499 | * @param leafLists list of leaf-list attributes of YANG list |
494 | * @throws DataModelException a violation of data model rules | 500 | * @throws DataModelException a violation of data model rules |
495 | */ | 501 | */ |
496 | - private void validateConfig(List<YangLeaf> leaves, List<YangLeafList> leafLists) throws DataModelException { | 502 | + private void validateConfig(List<YangLeaf> leaves, List<YangLeafList> leafLists) |
503 | + throws DataModelException { | ||
497 | 504 | ||
498 | /* | 505 | /* |
499 | * If a node has "config" set to "false", no node underneath it can have | 506 | * If a node has "config" set to "false", no node underneath it can have |
... | @@ -526,7 +533,8 @@ public class YangList extends YangNode | ... | @@ -526,7 +533,8 @@ public class YangList extends YangNode |
526 | * @param keys list of key attributes of list | 533 | * @param keys list of key attributes of list |
527 | * @throws DataModelException a violation of data model rules | 534 | * @throws DataModelException a violation of data model rules |
528 | */ | 535 | */ |
529 | - private void validateKey(List<YangLeaf> leaves, List<YangLeafList> leafLists, List<String> keys) throws | 536 | + private void validateKey(List<YangLeaf> leaves, List<YangLeafList> leafLists, List<String> keys) |
537 | + throws | ||
530 | DataModelException { | 538 | DataModelException { |
531 | boolean leafFound = false; | 539 | boolean leafFound = false; |
532 | List<YangLeaf> keyLeaves = new LinkedList<>(); | 540 | List<YangLeaf> keyLeaves = new LinkedList<>(); |
... | @@ -595,13 +603,15 @@ public class YangList extends YangNode | ... | @@ -595,13 +603,15 @@ public class YangList extends YangNode |
595 | } | 603 | } |
596 | 604 | ||
597 | @Override | 605 | @Override |
598 | - public void detectCollidingChild(String identifierName, YangConstructType dataType) throws DataModelException { | 606 | + public void detectCollidingChild(String identifierName, YangConstructType dataType) |
607 | + throws DataModelException { | ||
599 | // Asks helper to detect colliding child. | 608 | // Asks helper to detect colliding child. |
600 | detectCollidingChildUtil(identifierName, dataType, this); | 609 | detectCollidingChildUtil(identifierName, dataType, this); |
601 | } | 610 | } |
602 | 611 | ||
603 | @Override | 612 | @Override |
604 | - public void detectSelfCollision(String identifierName, YangConstructType dataType) throws DataModelException { | 613 | + public void detectSelfCollision(String identifierName, YangConstructType dataType) |
614 | + throws DataModelException { | ||
605 | if (getName().equals(identifierName)) { | 615 | if (getName().equals(identifierName)) { |
606 | throw new DataModelException("YANG file error: Duplicate input identifier detected, same as list \"" + | 616 | throw new DataModelException("YANG file error: Duplicate input identifier detected, same as list \"" + |
607 | getName() + "\""); | 617 | getName() + "\""); | ... | ... |
... | @@ -19,9 +19,11 @@ import java.util.Iterator; | ... | @@ -19,9 +19,11 @@ import java.util.Iterator; |
19 | import java.util.LinkedList; | 19 | import java.util.LinkedList; |
20 | import java.util.List; | 20 | import java.util.List; |
21 | import java.util.Set; | 21 | import java.util.Set; |
22 | + | ||
22 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 23 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; |
23 | import org.onosproject.yangutils.linker.exceptions.LinkerException; | 24 | import org.onosproject.yangutils.linker.exceptions.LinkerException; |
24 | -import org.onosproject.yangutils.linker.impl.YangReferenceResolver; | 25 | +import org.onosproject.yangutils.linker.ResolvableType; |
26 | +import org.onosproject.yangutils.linker.YangReferenceResolver; | ||
25 | import org.onosproject.yangutils.linker.impl.YangResolutionInfo; | 27 | import org.onosproject.yangutils.linker.impl.YangResolutionInfo; |
26 | import org.onosproject.yangutils.parser.Parsable; | 28 | import org.onosproject.yangutils.parser.Parsable; |
27 | import org.onosproject.yangutils.plugin.manager.YangFileInfo; | 29 | import org.onosproject.yangutils.plugin.manager.YangFileInfo; |
... | @@ -74,7 +76,8 @@ import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.resolveLi | ... | @@ -74,7 +76,8 @@ import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.resolveLi |
74 | /** | 76 | /** |
75 | * Represents data model node to maintain information defined in YANG module. | 77 | * Represents data model node to maintain information defined in YANG module. |
76 | */ | 78 | */ |
77 | -public class YangModule extends YangNode | 79 | +public class YangModule |
80 | + extends YangNode | ||
78 | implements YangLeavesHolder, YangDesc, YangReference, Parsable, CollisionDetector, YangReferenceResolver, | 81 | implements YangLeavesHolder, YangDesc, YangReference, Parsable, CollisionDetector, YangReferenceResolver, |
79 | RpcNotificationContainer { | 82 | RpcNotificationContainer { |
80 | 83 | ||
... | @@ -85,7 +88,7 @@ public class YangModule extends YangNode | ... | @@ -85,7 +88,7 @@ public class YangModule extends YangNode |
85 | 88 | ||
86 | /** | 89 | /** |
87 | * Reference:RFC 6020. | 90 | * Reference:RFC 6020. |
88 | - * <p> | 91 | + * |
89 | * The "contact" statement provides contact information for the module. The | 92 | * The "contact" statement provides contact information for the module. The |
90 | * argument is a string that is used to specify contact information for the | 93 | * argument is a string that is used to specify contact information for the |
91 | * person or persons to whom technical queries concerning this module should | 94 | * person or persons to whom technical queries concerning this module should |
... | @@ -96,7 +99,7 @@ public class YangModule extends YangNode | ... | @@ -96,7 +99,7 @@ public class YangModule extends YangNode |
96 | 99 | ||
97 | /** | 100 | /** |
98 | * Reference:RFC 6020. | 101 | * Reference:RFC 6020. |
99 | - * <p> | 102 | + * |
100 | * The "description" statement takes as an argument a string that contains a | 103 | * The "description" statement takes as an argument a string that contains a |
101 | * human-readable textual description of this definition. The text is | 104 | * human-readable textual description of this definition. The text is |
102 | * provided in a language (or languages) chosen by the module developer; for | 105 | * provided in a language (or languages) chosen by the module developer; for |
... | @@ -131,7 +134,7 @@ public class YangModule extends YangNode | ... | @@ -131,7 +134,7 @@ public class YangModule extends YangNode |
131 | 134 | ||
132 | /** | 135 | /** |
133 | * Reference:RFC 6020. | 136 | * Reference:RFC 6020. |
134 | - * <p> | 137 | + * |
135 | * The "organization" statement defines the party responsible for this | 138 | * The "organization" statement defines the party responsible for this |
136 | * module. The argument is a string that is used to specify a textual | 139 | * module. The argument is a string that is used to specify a textual |
137 | * description of the organization(s) under whose auspices this module was | 140 | * description of the organization(s) under whose auspices this module was |
... | @@ -193,7 +196,12 @@ public class YangModule extends YangNode | ... | @@ -193,7 +196,12 @@ public class YangModule extends YangNode |
193 | * matching "typedef" or "grouping" statement among the immediate | 196 | * matching "typedef" or "grouping" statement among the immediate |
194 | * sub-statements of each ancestor statement. | 197 | * sub-statements of each ancestor statement. |
195 | */ | 198 | */ |
196 | - private List<YangResolutionInfo> unresolvedResolutionList; | 199 | + private List<YangResolutionInfo> derivedTypeResolutionList; |
200 | + | ||
201 | + /** | ||
202 | + * uses resolution list. | ||
203 | + */ | ||
204 | + private List<YangResolutionInfo> usesResolutionList; | ||
197 | 205 | ||
198 | /** | 206 | /** |
199 | * Creates a YANG node of module type. | 207 | * Creates a YANG node of module type. |
... | @@ -201,7 +209,8 @@ public class YangModule extends YangNode | ... | @@ -201,7 +209,8 @@ public class YangModule extends YangNode |
201 | public YangModule() { | 209 | public YangModule() { |
202 | 210 | ||
203 | super(YangNodeType.MODULE_NODE); | 211 | super(YangNodeType.MODULE_NODE); |
204 | - unresolvedResolutionList = new LinkedList<YangResolutionInfo>(); | 212 | + derivedTypeResolutionList = new LinkedList<YangResolutionInfo>(); |
213 | + usesResolutionList = new LinkedList<YangResolutionInfo>(); | ||
205 | importList = new LinkedList<YangImport>(); | 214 | importList = new LinkedList<YangImport>(); |
206 | includeList = new LinkedList<YangInclude>(); | 215 | includeList = new LinkedList<YangInclude>(); |
207 | listOfLeaf = new LinkedList<YangLeaf>(); | 216 | listOfLeaf = new LinkedList<YangLeaf>(); |
... | @@ -326,6 +335,11 @@ public class YangModule extends YangNode | ... | @@ -326,6 +335,11 @@ public class YangModule extends YangNode |
326 | return listOfLeaf; | 335 | return listOfLeaf; |
327 | } | 336 | } |
328 | 337 | ||
338 | + @Override | ||
339 | + public void setListOfLeaf(List<YangLeaf> leafsList) { | ||
340 | + listOfLeaf = leafsList; | ||
341 | + } | ||
342 | + | ||
329 | /** | 343 | /** |
330 | * Adds a leaf in module. | 344 | * Adds a leaf in module. |
331 | * | 345 | * |
... | @@ -346,6 +360,12 @@ public class YangModule extends YangNode | ... | @@ -346,6 +360,12 @@ public class YangModule extends YangNode |
346 | return listOfLeafList; | 360 | return listOfLeafList; |
347 | } | 361 | } |
348 | 362 | ||
363 | + @Override | ||
364 | + public void setListOfLeafList(List<YangLeafList> listOfLeafList) { | ||
365 | + this.listOfLeafList = listOfLeafList; | ||
366 | + } | ||
367 | + | ||
368 | + | ||
349 | /** | 369 | /** |
350 | * Adds a leaf-list in module. | 370 | * Adds a leaf-list in module. |
351 | * | 371 | * |
... | @@ -413,17 +433,19 @@ public class YangModule extends YangNode | ... | @@ -413,17 +433,19 @@ public class YangModule extends YangNode |
413 | } | 433 | } |
414 | 434 | ||
415 | @Override | 435 | @Override |
416 | - public void resolveSelfFileLinking() throws DataModelException { | 436 | + public void resolveSelfFileLinking(ResolvableType type) |
437 | + throws DataModelException { | ||
417 | // Get the list to be resolved. | 438 | // Get the list to be resolved. |
418 | - List<YangResolutionInfo> resolutionList = getUnresolvedResolutionList(); | 439 | + List<YangResolutionInfo> resolutionList = getUnresolvedResolutionList(type); |
419 | // Resolve linking for a resolution list. | 440 | // Resolve linking for a resolution list. |
420 | resolveLinkingForResolutionList(resolutionList, this); | 441 | resolveLinkingForResolutionList(resolutionList, this); |
421 | } | 442 | } |
422 | 443 | ||
423 | @Override | 444 | @Override |
424 | - public void resolveInterFileLinking() throws DataModelException { | 445 | + public void resolveInterFileLinking(ResolvableType type) |
446 | + throws DataModelException { | ||
425 | // Get the list to be resolved. | 447 | // Get the list to be resolved. |
426 | - List<YangResolutionInfo> resolutionList = getUnresolvedResolutionList(); | 448 | + List<YangResolutionInfo> resolutionList = getUnresolvedResolutionList(type); |
427 | // Resolve linking for a resolution list. | 449 | // Resolve linking for a resolution list. |
428 | linkInterFileReferences(resolutionList, this); | 450 | linkInterFileReferences(resolutionList, this); |
429 | } | 451 | } |
... | @@ -500,7 +522,8 @@ public class YangModule extends YangNode | ... | @@ -500,7 +522,8 @@ public class YangModule extends YangNode |
500 | * @throws DataModelException a violation of data model rules | 522 | * @throws DataModelException a violation of data model rules |
501 | */ | 523 | */ |
502 | @Override | 524 | @Override |
503 | - public void validateDataOnEntry() throws DataModelException { | 525 | + public void validateDataOnEntry() |
526 | + throws DataModelException { | ||
504 | /* | 527 | /* |
505 | * Module is root in the data model tree, hence there is no entry | 528 | * Module is root in the data model tree, hence there is no entry |
506 | * validation | 529 | * validation |
... | @@ -513,7 +536,8 @@ public class YangModule extends YangNode | ... | @@ -513,7 +536,8 @@ public class YangModule extends YangNode |
513 | * @throws DataModelException a violation of data model rules | 536 | * @throws DataModelException a violation of data model rules |
514 | */ | 537 | */ |
515 | @Override | 538 | @Override |
516 | - public void validateDataOnExit() throws DataModelException { | 539 | + public void validateDataOnExit() |
540 | + throws DataModelException { | ||
517 | /* | 541 | /* |
518 | * TODO: perform symbol linking for the imported or included YANG info. | 542 | * TODO: perform symbol linking for the imported or included YANG info. |
519 | * TODO: perform symbol resolution for referred YANG entities. | 543 | * TODO: perform symbol resolution for referred YANG entities. |
... | @@ -521,29 +545,47 @@ public class YangModule extends YangNode | ... | @@ -521,29 +545,47 @@ public class YangModule extends YangNode |
521 | } | 545 | } |
522 | 546 | ||
523 | @Override | 547 | @Override |
524 | - public void detectCollidingChild(String identifierName, YangConstructType dataType) throws DataModelException { | 548 | + public void detectCollidingChild(String identifierName, YangConstructType dataType) |
549 | + throws DataModelException { | ||
525 | // Asks helper to detect colliding child. | 550 | // Asks helper to detect colliding child. |
526 | detectCollidingChildUtil(identifierName, dataType, this); | 551 | detectCollidingChildUtil(identifierName, dataType, this); |
527 | } | 552 | } |
528 | 553 | ||
529 | @Override | 554 | @Override |
530 | - public void detectSelfCollision(String identifierName, YangConstructType dataType) throws DataModelException { | 555 | + public void detectSelfCollision(String identifierName, YangConstructType dataType) |
556 | + throws DataModelException { | ||
531 | // Not required as module doesn't have any parent. | 557 | // Not required as module doesn't have any parent. |
532 | } | 558 | } |
533 | 559 | ||
534 | @Override | 560 | @Override |
535 | - public List<YangResolutionInfo> getUnresolvedResolutionList() { | 561 | + public List<YangResolutionInfo> getUnresolvedResolutionList(ResolvableType type) { |
536 | - return unresolvedResolutionList; | 562 | + if (type == ResolvableType.YANG_DERIVED_DATA_TYPE) { |
563 | + return derivedTypeResolutionList; | ||
564 | + } else { | ||
565 | + return usesResolutionList; | ||
566 | + } | ||
567 | + | ||
537 | } | 568 | } |
538 | 569 | ||
539 | @Override | 570 | @Override |
540 | - public void addToResolutionList(YangResolutionInfo resolutionInfo) { | 571 | + public void addToResolutionList(YangResolutionInfo resolutionInfo, |
541 | - unresolvedResolutionList.add(resolutionInfo); | 572 | + ResolvableType type) { |
573 | + if (type == ResolvableType.YANG_DERIVED_DATA_TYPE) { | ||
574 | + derivedTypeResolutionList.add(resolutionInfo); | ||
575 | + } else if (type == ResolvableType.YANG_USES) { | ||
576 | + usesResolutionList.add(resolutionInfo); | ||
577 | + } | ||
542 | } | 578 | } |
543 | 579 | ||
544 | @Override | 580 | @Override |
545 | - public void setResolutionList(List<YangResolutionInfo> resolutionList) { | 581 | + public void setResolutionList(List<YangResolutionInfo> resolutionList, |
546 | - unresolvedResolutionList = resolutionList; | 582 | + ResolvableType type) { |
583 | + if (type == ResolvableType.YANG_DERIVED_DATA_TYPE) { | ||
584 | + derivedTypeResolutionList = resolutionList; | ||
585 | + } else if (type == ResolvableType.YANG_USES) { | ||
586 | + usesResolutionList = resolutionList; | ||
587 | + } | ||
588 | + | ||
547 | } | 589 | } |
548 | 590 | ||
549 | @Override | 591 | @Override | ... | ... |
... | @@ -16,12 +16,6 @@ | ... | @@ -16,12 +16,6 @@ |
16 | package org.onosproject.yangutils.datamodel; | 16 | package org.onosproject.yangutils.datamodel; |
17 | 17 | ||
18 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 18 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; |
19 | -import org.onosproject.yangutils.parser.Parsable; | ||
20 | -import org.onosproject.yangutils.translator.tojava.TraversalType; | ||
21 | - | ||
22 | -import static org.onosproject.yangutils.translator.tojava.TraversalType.CHILD; | ||
23 | -import static org.onosproject.yangutils.translator.tojava.TraversalType.PARENT; | ||
24 | -import static org.onosproject.yangutils.translator.tojava.TraversalType.SIBILING; | ||
25 | 19 | ||
26 | /** | 20 | /** |
27 | * Represents base class of a node in data model tree. | 21 | * Represents base class of a node in data model tree. |
... | @@ -229,179 +223,4 @@ public abstract class YangNode | ... | @@ -229,179 +223,4 @@ public abstract class YangNode |
229 | newChild.setPreviousSibling(curNode); | 223 | newChild.setPreviousSibling(curNode); |
230 | } | 224 | } |
231 | } | 225 | } |
232 | - | ||
233 | - /** | ||
234 | - * Clone the current node contents and create a new node. | ||
235 | - * | ||
236 | - * @return cloned node | ||
237 | - * @throws CloneNotSupportedException clone is not supported by the referred | ||
238 | - * node | ||
239 | - */ | ||
240 | - @Override | ||
241 | - public YangNode clone() | ||
242 | - throws CloneNotSupportedException { | ||
243 | - YangNode clonedNode = (YangNode) super.clone(); | ||
244 | - clonedNode.setParent(null); | ||
245 | - clonedNode.setChild(null); | ||
246 | - clonedNode.setNextSibling(null); | ||
247 | - clonedNode.setPreviousSibling(null); | ||
248 | - return clonedNode; | ||
249 | - } | ||
250 | - | ||
251 | - /** | ||
252 | - * Clone the subtree from the specified source node to the mentioned target | ||
253 | - * node. The source and target root node cloning is carried out by the | ||
254 | - * caller. | ||
255 | - * | ||
256 | - * @param srcRootNode source node for sub tree cloning | ||
257 | - * @param dstRootNode destination node where the sub tree needs to be cloned | ||
258 | - * @throws DataModelException data model error | ||
259 | - */ | ||
260 | - public static void cloneSubTree(YangNode srcRootNode, YangNode dstRootNode) | ||
261 | - throws DataModelException { | ||
262 | - | ||
263 | - YangNode nextNodeToClone = srcRootNode; | ||
264 | - TraversalType curTraversal; | ||
265 | - | ||
266 | - YangNode clonedTreeCurNode = dstRootNode; | ||
267 | - YangNode newNode = null; | ||
268 | - | ||
269 | - nextNodeToClone = nextNodeToClone.getChild(); | ||
270 | - if (nextNodeToClone == null) { | ||
271 | - return; | ||
272 | - } else { | ||
273 | - /** | ||
274 | - * Root level cloning is taken care in the caller. | ||
275 | - */ | ||
276 | - curTraversal = CHILD; | ||
277 | - } | ||
278 | - | ||
279 | - /** | ||
280 | - * Caller ensures the cloning of the root nodes | ||
281 | - */ | ||
282 | - try { | ||
283 | - while (nextNodeToClone != srcRootNode) { | ||
284 | - if (nextNodeToClone == null) { | ||
285 | - throw new DataModelException("Internal error: Cloning failed, source tree null pointer reached"); | ||
286 | - } | ||
287 | - if (curTraversal != PARENT) { | ||
288 | - newNode = nextNodeToClone.clone(); | ||
289 | - detectCollisionWhileCloning(clonedTreeCurNode, newNode, curTraversal); | ||
290 | - } | ||
291 | - | ||
292 | - if (curTraversal == CHILD) { | ||
293 | - | ||
294 | - /** | ||
295 | - * add the new node to the cloned tree. | ||
296 | - */ | ||
297 | - clonedTreeCurNode.addChild(newNode); | ||
298 | - | ||
299 | - /** | ||
300 | - * update the cloned tree's traversal current node as the | ||
301 | - * new node. | ||
302 | - */ | ||
303 | - clonedTreeCurNode = newNode; | ||
304 | - } else if (curTraversal == SIBILING) { | ||
305 | - | ||
306 | - clonedTreeCurNode.addNextSibling(newNode); | ||
307 | - clonedTreeCurNode = newNode; | ||
308 | - } else if (curTraversal == PARENT) { | ||
309 | - clonedTreeCurNode = clonedTreeCurNode.getParent(); | ||
310 | - } | ||
311 | - | ||
312 | - if (curTraversal != PARENT && nextNodeToClone.getChild() != null) { | ||
313 | - curTraversal = CHILD; | ||
314 | - | ||
315 | - /** | ||
316 | - * update the traversal's current node. | ||
317 | - */ | ||
318 | - nextNodeToClone = nextNodeToClone.getChild(); | ||
319 | - | ||
320 | - } else if (nextNodeToClone.getNextSibling() != null) { | ||
321 | - | ||
322 | - curTraversal = SIBILING; | ||
323 | - | ||
324 | - nextNodeToClone = nextNodeToClone.getNextSibling(); | ||
325 | - } else { | ||
326 | - curTraversal = PARENT; | ||
327 | - nextNodeToClone = nextNodeToClone.getParent(); | ||
328 | - } | ||
329 | - } | ||
330 | - } catch (CloneNotSupportedException e) { | ||
331 | - throw new DataModelException("Failed to clone the tree"); | ||
332 | - } | ||
333 | - | ||
334 | - } | ||
335 | - | ||
336 | - /** | ||
337 | - * Detects collision when the grouping is deep copied to the uses's parent. | ||
338 | - * | ||
339 | - * @param currentNode parent/previous sibling node for the new node | ||
340 | - * @param newNode node which has to be added | ||
341 | - * @param addAs traversal type of the node | ||
342 | - * @throws DataModelException data model error | ||
343 | - */ | ||
344 | - private static void detectCollisionWhileCloning(YangNode currentNode, YangNode newNode, TraversalType addAs) | ||
345 | - throws DataModelException { | ||
346 | - if (!(currentNode instanceof CollisionDetector) | ||
347 | - || !(newNode instanceof Parsable)) { | ||
348 | - throw new DataModelException("Node in data model tree does not support collision detection"); | ||
349 | - } | ||
350 | - | ||
351 | - CollisionDetector collisionDetector = (CollisionDetector) currentNode; | ||
352 | - Parsable parsable = (Parsable) newNode; | ||
353 | - if (addAs == TraversalType.CHILD) { | ||
354 | - collisionDetector.detectCollidingChild(newNode.getName(), parsable.getYangConstructType()); | ||
355 | - } else if (addAs == TraversalType.SIBILING) { | ||
356 | - currentNode = currentNode.getParent(); | ||
357 | - if (!(currentNode instanceof CollisionDetector)) { | ||
358 | - throw new DataModelException("Node in data model tree does not support collision detection"); | ||
359 | - } | ||
360 | - collisionDetector = (CollisionDetector) currentNode; | ||
361 | - collisionDetector.detectCollidingChild(newNode.getName(), parsable.getYangConstructType()); | ||
362 | - } else { | ||
363 | - throw new DataModelException("Errored tree cloning"); | ||
364 | - } | ||
365 | - | ||
366 | - } | ||
367 | - | ||
368 | - /** | ||
369 | - * Add a new next sibling. | ||
370 | - * | ||
371 | - * @param newSibling new sibling to be added | ||
372 | - * @throws DataModelException data model error | ||
373 | - */ | ||
374 | - private void addNextSibling(YangNode newSibling) | ||
375 | - throws DataModelException { | ||
376 | - | ||
377 | - if (newSibling.getNodeType() == null) { | ||
378 | - throw new DataModelException("Cloned abstract node cannot be inserted into a tree"); | ||
379 | - } | ||
380 | - | ||
381 | - if (newSibling.getParent() == null) { | ||
382 | - /** | ||
383 | - * Since the siblings needs to have a common parent, set the parent | ||
384 | - * as the current node's parent | ||
385 | - */ | ||
386 | - newSibling.setParent(getParent()); | ||
387 | - | ||
388 | - } else { | ||
389 | - throw new DataModelException("Node is already part of a tree, and cannot be added as a sibling"); | ||
390 | - } | ||
391 | - | ||
392 | - if (newSibling.getPreviousSibling() == null) { | ||
393 | - newSibling.setPreviousSibling(this); | ||
394 | - setNextSibling(newSibling); | ||
395 | - } else { | ||
396 | - throw new DataModelException("New sibling to be added is not atomic, it already has a previous sibling"); | ||
397 | - } | ||
398 | - | ||
399 | - if (newSibling.getChild() != null) { | ||
400 | - throw new DataModelException("Sibling to be added is not atomic, it already has a child"); | ||
401 | - } | ||
402 | - | ||
403 | - if (newSibling.getNextSibling() != null) { | ||
404 | - throw new DataModelException("Sibling to be added is not atomic, it already has a next sibling"); | ||
405 | - } | ||
406 | - } | ||
407 | } | 226 | } | ... | ... |
... | @@ -74,7 +74,8 @@ import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCol | ... | @@ -74,7 +74,8 @@ import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCol |
74 | /** | 74 | /** |
75 | * Represents data model node to maintain information defined in YANG notification. | 75 | * Represents data model node to maintain information defined in YANG notification. |
76 | */ | 76 | */ |
77 | -public class YangNotification extends YangNode | 77 | +public class YangNotification |
78 | + extends YangNode | ||
78 | implements YangLeavesHolder, YangCommonInfo, Parsable, CollisionDetector, YangAugmentationHolder { | 79 | implements YangLeavesHolder, YangCommonInfo, Parsable, CollisionDetector, YangAugmentationHolder { |
79 | 80 | ||
80 | /** | 81 | /** |
... | @@ -117,13 +118,15 @@ public class YangNotification extends YangNode | ... | @@ -117,13 +118,15 @@ public class YangNotification extends YangNode |
117 | } | 118 | } |
118 | 119 | ||
119 | @Override | 120 | @Override |
120 | - public void detectCollidingChild(String identifierName, YangConstructType dataType) throws DataModelException { | 121 | + public void detectCollidingChild(String identifierName, YangConstructType dataType) |
122 | + throws DataModelException { | ||
121 | // Detect colliding child. | 123 | // Detect colliding child. |
122 | detectCollidingChildUtil(identifierName, dataType, this); | 124 | detectCollidingChildUtil(identifierName, dataType, this); |
123 | } | 125 | } |
124 | 126 | ||
125 | @Override | 127 | @Override |
126 | - public void detectSelfCollision(String identifierName, YangConstructType dataType) throws DataModelException { | 128 | + public void detectSelfCollision(String identifierName, YangConstructType dataType) |
129 | + throws DataModelException { | ||
127 | if (this.getName().equals(identifierName)) { | 130 | if (this.getName().equals(identifierName)) { |
128 | throw new DataModelException("YANG file error: Duplicate input identifier detected, same as notification \"" | 131 | throw new DataModelException("YANG file error: Duplicate input identifier detected, same as notification \"" |
129 | + this.getName() + "\""); | 132 | + this.getName() + "\""); |
... | @@ -136,12 +139,14 @@ public class YangNotification extends YangNode | ... | @@ -136,12 +139,14 @@ public class YangNotification extends YangNode |
136 | } | 139 | } |
137 | 140 | ||
138 | @Override | 141 | @Override |
139 | - public void validateDataOnEntry() throws DataModelException { | 142 | + public void validateDataOnEntry() |
143 | + throws DataModelException { | ||
140 | //TODO: implement the method. | 144 | //TODO: implement the method. |
141 | } | 145 | } |
142 | 146 | ||
143 | @Override | 147 | @Override |
144 | - public void validateDataOnExit() throws DataModelException { | 148 | + public void validateDataOnExit() |
149 | + throws DataModelException { | ||
145 | //TODO: implement the method. | 150 | //TODO: implement the method. |
146 | } | 151 | } |
147 | 152 | ||
... | @@ -161,6 +166,11 @@ public class YangNotification extends YangNode | ... | @@ -161,6 +166,11 @@ public class YangNotification extends YangNode |
161 | } | 166 | } |
162 | 167 | ||
163 | @Override | 168 | @Override |
169 | + public void setListOfLeaf(List<YangLeaf> leafsList) { | ||
170 | + listOfLeaf = leafsList; | ||
171 | + } | ||
172 | + | ||
173 | + @Override | ||
164 | public void addLeaf(YangLeaf leaf) { | 174 | public void addLeaf(YangLeaf leaf) { |
165 | getListOfLeaf().add(leaf); | 175 | getListOfLeaf().add(leaf); |
166 | } | 176 | } |
... | @@ -171,6 +181,11 @@ public class YangNotification extends YangNode | ... | @@ -171,6 +181,11 @@ public class YangNotification extends YangNode |
171 | } | 181 | } |
172 | 182 | ||
173 | @Override | 183 | @Override |
184 | + public void setListOfLeafList(List<YangLeafList> listOfLeafList) { | ||
185 | + this.listOfLeafList = listOfLeafList; | ||
186 | + } | ||
187 | + | ||
188 | + @Override | ||
174 | public void addLeafList(YangLeafList leafList) { | 189 | public void addLeafList(YangLeafList leafList) { |
175 | getListOfLeafList().add(leafList); | 190 | getListOfLeafList().add(leafList); |
176 | } | 191 | } | ... | ... |
... | @@ -67,7 +67,8 @@ import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCol | ... | @@ -67,7 +67,8 @@ import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCol |
67 | /** | 67 | /** |
68 | * Represents data model node to maintain information defined in YANG output. | 68 | * Represents data model node to maintain information defined in YANG output. |
69 | */ | 69 | */ |
70 | -public class YangOutput extends YangNode | 70 | +public class YangOutput |
71 | + extends YangNode | ||
71 | implements YangLeavesHolder, Parsable, CollisionDetector, YangAugmentationHolder { | 72 | implements YangLeavesHolder, Parsable, CollisionDetector, YangAugmentationHolder { |
72 | 73 | ||
73 | /** | 74 | /** |
... | @@ -95,13 +96,15 @@ public class YangOutput extends YangNode | ... | @@ -95,13 +96,15 @@ public class YangOutput extends YangNode |
95 | } | 96 | } |
96 | 97 | ||
97 | @Override | 98 | @Override |
98 | - public void detectCollidingChild(String identifierName, YangConstructType dataType) throws DataModelException { | 99 | + public void detectCollidingChild(String identifierName, YangConstructType dataType) |
100 | + throws DataModelException { | ||
99 | // Detect colliding child. | 101 | // Detect colliding child. |
100 | detectCollidingChildUtil(identifierName, dataType, this); | 102 | detectCollidingChildUtil(identifierName, dataType, this); |
101 | } | 103 | } |
102 | 104 | ||
103 | @Override | 105 | @Override |
104 | - public void detectSelfCollision(String identifierName, YangConstructType dataType) throws DataModelException { | 106 | + public void detectSelfCollision(String identifierName, YangConstructType dataType) |
107 | + throws DataModelException { | ||
105 | if (this.getName().equals(identifierName)) { | 108 | if (this.getName().equals(identifierName)) { |
106 | throw new DataModelException("YANG file error: Duplicate identifier detected, same as output \"" | 109 | throw new DataModelException("YANG file error: Duplicate identifier detected, same as output \"" |
107 | + this.getName() + "\""); | 110 | + this.getName() + "\""); |
... | @@ -114,12 +117,14 @@ public class YangOutput extends YangNode | ... | @@ -114,12 +117,14 @@ public class YangOutput extends YangNode |
114 | } | 117 | } |
115 | 118 | ||
116 | @Override | 119 | @Override |
117 | - public void validateDataOnEntry() throws DataModelException { | 120 | + public void validateDataOnEntry() |
121 | + throws DataModelException { | ||
118 | //TODO: implement the method. | 122 | //TODO: implement the method. |
119 | } | 123 | } |
120 | 124 | ||
121 | @Override | 125 | @Override |
122 | - public void validateDataOnExit() throws DataModelException { | 126 | + public void validateDataOnExit() |
127 | + throws DataModelException { | ||
123 | //TODO: implement the method. | 128 | //TODO: implement the method. |
124 | } | 129 | } |
125 | 130 | ||
... | @@ -134,11 +139,22 @@ public class YangOutput extends YangNode | ... | @@ -134,11 +139,22 @@ public class YangOutput extends YangNode |
134 | } | 139 | } |
135 | 140 | ||
136 | @Override | 141 | @Override |
142 | + public void setListOfLeaf(List<YangLeaf> leafsList) { | ||
143 | + listOfLeaf = leafsList; | ||
144 | + } | ||
145 | + | ||
146 | + @Override | ||
137 | public List<YangLeafList> getListOfLeafList() { | 147 | public List<YangLeafList> getListOfLeafList() { |
138 | return listOfLeafList; | 148 | return listOfLeafList; |
139 | } | 149 | } |
140 | 150 | ||
141 | @Override | 151 | @Override |
152 | + public void setListOfLeafList(List<YangLeafList> listOfLeafList) { | ||
153 | + this.listOfLeafList = listOfLeafList; | ||
154 | + } | ||
155 | + | ||
156 | + | ||
157 | + @Override | ||
142 | public void addLeafList(YangLeafList leafList) { | 158 | public void addLeafList(YangLeafList leafList) { |
143 | getListOfLeafList().add(leafList); | 159 | getListOfLeafList().add(leafList); |
144 | } | 160 | } | ... | ... |
... | @@ -19,9 +19,11 @@ import java.util.Iterator; | ... | @@ -19,9 +19,11 @@ import java.util.Iterator; |
19 | import java.util.LinkedList; | 19 | import java.util.LinkedList; |
20 | import java.util.List; | 20 | import java.util.List; |
21 | import java.util.Set; | 21 | import java.util.Set; |
22 | + | ||
22 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 23 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; |
23 | import org.onosproject.yangutils.linker.exceptions.LinkerException; | 24 | import org.onosproject.yangutils.linker.exceptions.LinkerException; |
24 | -import org.onosproject.yangutils.linker.impl.YangReferenceResolver; | 25 | +import org.onosproject.yangutils.linker.ResolvableType; |
26 | +import org.onosproject.yangutils.linker.YangReferenceResolver; | ||
25 | import org.onosproject.yangutils.linker.impl.YangResolutionInfo; | 27 | import org.onosproject.yangutils.linker.impl.YangResolutionInfo; |
26 | import org.onosproject.yangutils.parser.Parsable; | 28 | import org.onosproject.yangutils.parser.Parsable; |
27 | import org.onosproject.yangutils.plugin.manager.YangFileInfo; | 29 | import org.onosproject.yangutils.plugin.manager.YangFileInfo; |
... | @@ -82,7 +84,8 @@ import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.resolveLi | ... | @@ -82,7 +84,8 @@ import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.resolveLi |
82 | /** | 84 | /** |
83 | * Represents data model node to maintain information defined in YANG sub-module. | 85 | * Represents data model node to maintain information defined in YANG sub-module. |
84 | */ | 86 | */ |
85 | -public class YangSubModule extends YangNode | 87 | +public class YangSubModule |
88 | + extends YangNode | ||
86 | implements YangLeavesHolder, YangDesc, YangReference, Parsable, CollisionDetector, YangReferenceResolver, | 89 | implements YangLeavesHolder, YangDesc, YangReference, Parsable, CollisionDetector, YangReferenceResolver, |
87 | RpcNotificationContainer { | 90 | RpcNotificationContainer { |
88 | 91 | ||
... | @@ -156,6 +159,7 @@ public class YangSubModule extends YangNode | ... | @@ -156,6 +159,7 @@ public class YangSubModule extends YangNode |
156 | * Prefix of parent module. | 159 | * Prefix of parent module. |
157 | */ | 160 | */ |
158 | private String prefix; | 161 | private String prefix; |
162 | + | ||
159 | /*- | 163 | /*- |
160 | * Reference RFC 6020. | 164 | * Reference RFC 6020. |
161 | * | 165 | * |
... | @@ -190,14 +194,20 @@ public class YangSubModule extends YangNode | ... | @@ -190,14 +194,20 @@ public class YangSubModule extends YangNode |
190 | * matching "typedef" or "grouping" statement among the immediate | 194 | * matching "typedef" or "grouping" statement among the immediate |
191 | * sub-statements of each ancestor statement. | 195 | * sub-statements of each ancestor statement. |
192 | */ | 196 | */ |
193 | - private List<YangResolutionInfo> unresolvedResolutionList; | 197 | + private List<YangResolutionInfo> derivedTypeResolutionList; |
198 | + | ||
199 | + /** | ||
200 | + * uses resolution list. | ||
201 | + */ | ||
202 | + private List<YangResolutionInfo> usesResolutionList; | ||
194 | 203 | ||
195 | /** | 204 | /** |
196 | * Creates a sub module node. | 205 | * Creates a sub module node. |
197 | */ | 206 | */ |
198 | public YangSubModule() { | 207 | public YangSubModule() { |
199 | super(YangNodeType.SUB_MODULE_NODE); | 208 | super(YangNodeType.SUB_MODULE_NODE); |
200 | - unresolvedResolutionList = new LinkedList<YangResolutionInfo>(); | 209 | + derivedTypeResolutionList = new LinkedList<YangResolutionInfo>(); |
210 | + usesResolutionList = new LinkedList<YangResolutionInfo>(); | ||
201 | importList = new LinkedList<YangImport>(); | 211 | importList = new LinkedList<YangImport>(); |
202 | includeList = new LinkedList<YangInclude>(); | 212 | includeList = new LinkedList<YangInclude>(); |
203 | listOfLeaf = new LinkedList<YangLeaf>(); | 213 | listOfLeaf = new LinkedList<YangLeaf>(); |
... | @@ -341,17 +351,19 @@ public class YangSubModule extends YangNode | ... | @@ -341,17 +351,19 @@ public class YangSubModule extends YangNode |
341 | } | 351 | } |
342 | 352 | ||
343 | @Override | 353 | @Override |
344 | - public void resolveSelfFileLinking() throws DataModelException { | 354 | + public void resolveSelfFileLinking(ResolvableType type) |
355 | + throws DataModelException { | ||
345 | // Get the list to be resolved. | 356 | // Get the list to be resolved. |
346 | - List<YangResolutionInfo> resolutionList = getUnresolvedResolutionList(); | 357 | + List<YangResolutionInfo> resolutionList = getUnresolvedResolutionList(type); |
347 | // Resolve linking for a resolution list. | 358 | // Resolve linking for a resolution list. |
348 | resolveLinkingForResolutionList(resolutionList, this); | 359 | resolveLinkingForResolutionList(resolutionList, this); |
349 | } | 360 | } |
350 | 361 | ||
351 | @Override | 362 | @Override |
352 | - public void resolveInterFileLinking() throws DataModelException { | 363 | + public void resolveInterFileLinking(ResolvableType type) |
364 | + throws DataModelException { | ||
353 | // Get the list to be resolved. | 365 | // Get the list to be resolved. |
354 | - List<YangResolutionInfo> resolutionList = getUnresolvedResolutionList(); | 366 | + List<YangResolutionInfo> resolutionList = getUnresolvedResolutionList(type); |
355 | // Resolve linking for a resolution list. | 367 | // Resolve linking for a resolution list. |
356 | linkInterFileReferences(resolutionList, this); | 368 | linkInterFileReferences(resolutionList, this); |
357 | } | 369 | } |
... | @@ -366,6 +378,11 @@ public class YangSubModule extends YangNode | ... | @@ -366,6 +378,11 @@ public class YangSubModule extends YangNode |
366 | return listOfLeaf; | 378 | return listOfLeaf; |
367 | } | 379 | } |
368 | 380 | ||
381 | + @Override | ||
382 | + public void setListOfLeaf(List<YangLeaf> leafsList) { | ||
383 | + listOfLeaf = leafsList; | ||
384 | + } | ||
385 | + | ||
369 | /** | 386 | /** |
370 | * Adds a leaf. | 387 | * Adds a leaf. |
371 | * | 388 | * |
... | @@ -386,6 +403,11 @@ public class YangSubModule extends YangNode | ... | @@ -386,6 +403,11 @@ public class YangSubModule extends YangNode |
386 | return listOfLeafList; | 403 | return listOfLeafList; |
387 | } | 404 | } |
388 | 405 | ||
406 | + @Override | ||
407 | + public void setListOfLeafList(List<YangLeafList> listOfLeafList) { | ||
408 | + this.listOfLeafList = listOfLeafList; | ||
409 | + } | ||
410 | + | ||
389 | /** | 411 | /** |
390 | * Adds a leaf-list. | 412 | * Adds a leaf-list. |
391 | * | 413 | * |
... | @@ -486,7 +508,8 @@ public class YangSubModule extends YangNode | ... | @@ -486,7 +508,8 @@ public class YangSubModule extends YangNode |
486 | * @throws DataModelException a violation of data model rules | 508 | * @throws DataModelException a violation of data model rules |
487 | */ | 509 | */ |
488 | @Override | 510 | @Override |
489 | - public void validateDataOnEntry() throws DataModelException { | 511 | + public void validateDataOnEntry() |
512 | + throws DataModelException { | ||
490 | // TODO auto-generated method stub, to be implemented by parser | 513 | // TODO auto-generated method stub, to be implemented by parser |
491 | } | 514 | } |
492 | 515 | ||
... | @@ -496,34 +519,52 @@ public class YangSubModule extends YangNode | ... | @@ -496,34 +519,52 @@ public class YangSubModule extends YangNode |
496 | * @throws DataModelException a violation of data model rules | 519 | * @throws DataModelException a violation of data model rules |
497 | */ | 520 | */ |
498 | @Override | 521 | @Override |
499 | - public void validateDataOnExit() throws DataModelException { | 522 | + public void validateDataOnExit() |
523 | + throws DataModelException { | ||
500 | // TODO auto-generated method stub, to be implemented by parser | 524 | // TODO auto-generated method stub, to be implemented by parser |
501 | } | 525 | } |
502 | 526 | ||
503 | @Override | 527 | @Override |
504 | - public void detectCollidingChild(String identifierName, YangConstructType dataType) throws DataModelException { | 528 | + public void detectCollidingChild(String identifierName, YangConstructType dataType) |
529 | + throws DataModelException { | ||
505 | // Asks helper to detect colliding child. | 530 | // Asks helper to detect colliding child. |
506 | detectCollidingChildUtil(identifierName, dataType, this); | 531 | detectCollidingChildUtil(identifierName, dataType, this); |
507 | } | 532 | } |
508 | 533 | ||
509 | @Override | 534 | @Override |
510 | - public void detectSelfCollision(String identifierName, YangConstructType dataType) throws DataModelException { | 535 | + public void detectSelfCollision(String identifierName, YangConstructType dataType) |
536 | + throws DataModelException { | ||
511 | // Not required as module doesn't have any parent. | 537 | // Not required as module doesn't have any parent. |
512 | } | 538 | } |
513 | 539 | ||
514 | @Override | 540 | @Override |
515 | - public List<YangResolutionInfo> getUnresolvedResolutionList() { | 541 | + public List<YangResolutionInfo> getUnresolvedResolutionList(ResolvableType type) { |
516 | - return unresolvedResolutionList; | 542 | + if (type == ResolvableType.YANG_DERIVED_DATA_TYPE) { |
543 | + return derivedTypeResolutionList; | ||
544 | + } else { | ||
545 | + return usesResolutionList; | ||
546 | + } | ||
517 | } | 547 | } |
518 | 548 | ||
519 | @Override | 549 | @Override |
520 | - public void addToResolutionList(YangResolutionInfo resolutionInfo) { | 550 | + public void addToResolutionList(YangResolutionInfo resolutionInfo, |
521 | - this.unresolvedResolutionList.add(resolutionInfo); | 551 | + ResolvableType type) { |
552 | + if (type == ResolvableType.YANG_DERIVED_DATA_TYPE) { | ||
553 | + derivedTypeResolutionList.add(resolutionInfo); | ||
554 | + } else if (type == ResolvableType.YANG_USES) { | ||
555 | + usesResolutionList.add(resolutionInfo); | ||
556 | + } | ||
522 | } | 557 | } |
523 | 558 | ||
524 | @Override | 559 | @Override |
525 | - public void setResolutionList(List<YangResolutionInfo> resolutionList) { | 560 | + public void setResolutionList(List<YangResolutionInfo> resolutionList, |
526 | - this.unresolvedResolutionList = resolutionList; | 561 | + ResolvableType type) { |
562 | + if (type == ResolvableType.YANG_DERIVED_DATA_TYPE) { | ||
563 | + derivedTypeResolutionList = resolutionList; | ||
564 | + } else if (type == ResolvableType.YANG_USES) { | ||
565 | + usesResolutionList = resolutionList; | ||
566 | + } | ||
567 | + | ||
527 | } | 568 | } |
528 | 569 | ||
529 | /** | 570 | /** | ... | ... |
... | @@ -17,9 +17,9 @@ | ... | @@ -17,9 +17,9 @@ |
17 | package org.onosproject.yangutils.datamodel; | 17 | package org.onosproject.yangutils.datamodel; |
18 | 18 | ||
19 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 19 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; |
20 | +import org.onosproject.yangutils.linker.Resolvable; | ||
21 | +import org.onosproject.yangutils.linker.ResolvableStatus; | ||
20 | import org.onosproject.yangutils.linker.exceptions.LinkerException; | 22 | import org.onosproject.yangutils.linker.exceptions.LinkerException; |
21 | -import org.onosproject.yangutils.linker.impl.Resolvable; | ||
22 | -import org.onosproject.yangutils.linker.impl.ResolvableStatus; | ||
23 | import org.onosproject.yangutils.parser.Parsable; | 23 | import org.onosproject.yangutils.parser.Parsable; |
24 | import org.onosproject.yangutils.utils.YangConstructType; | 24 | import org.onosproject.yangutils.utils.YangConstructType; |
25 | 25 | ||
... | @@ -247,7 +247,8 @@ public class YangType<T> | ... | @@ -247,7 +247,8 @@ public class YangType<T> |
247 | } | 247 | } |
248 | 248 | ||
249 | @Override | 249 | @Override |
250 | - public void resolve() throws LinkerException { | 250 | + public void resolve() |
251 | + throws LinkerException { | ||
251 | /* | 252 | /* |
252 | * Check whether the data type is derived. | 253 | * Check whether the data type is derived. |
253 | */ | 254 | */ | ... | ... |
... | @@ -15,10 +15,13 @@ | ... | @@ -15,10 +15,13 @@ |
15 | */ | 15 | */ |
16 | package org.onosproject.yangutils.datamodel; | 16 | package org.onosproject.yangutils.datamodel; |
17 | 17 | ||
18 | +import java.util.LinkedList; | ||
19 | +import java.util.List; | ||
20 | + | ||
18 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 21 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; |
22 | +import org.onosproject.yangutils.linker.Resolvable; | ||
23 | +import org.onosproject.yangutils.linker.ResolvableStatus; | ||
19 | import org.onosproject.yangutils.linker.exceptions.LinkerException; | 24 | import org.onosproject.yangutils.linker.exceptions.LinkerException; |
20 | -import org.onosproject.yangutils.linker.impl.Resolvable; | ||
21 | -import org.onosproject.yangutils.linker.impl.ResolvableStatus; | ||
22 | import org.onosproject.yangutils.parser.Parsable; | 25 | import org.onosproject.yangutils.parser.Parsable; |
23 | import org.onosproject.yangutils.utils.YangConstructType; | 26 | import org.onosproject.yangutils.utils.YangConstructType; |
24 | 27 | ||
... | @@ -96,12 +99,30 @@ public class YangUses | ... | @@ -96,12 +99,30 @@ public class YangUses |
96 | private ResolvableStatus resolvableStatus; | 99 | private ResolvableStatus resolvableStatus; |
97 | 100 | ||
98 | /** | 101 | /** |
102 | + * Effective list of nodes of grouping that needs to replicated at YANG uses. | ||
103 | + */ | ||
104 | + List<YangNode> resolvedGroupingNodes; | ||
105 | + | ||
106 | + /** | ||
107 | + * Effective list of leaves of grouping that needs to replicated at YANG uses. | ||
108 | + */ | ||
109 | + List<List<YangLeaf>> resolvedGroupingLeaves; | ||
110 | + | ||
111 | + /** | ||
112 | + * Effective list of leaf lists of grouping that needs to replicated at YANG uses. | ||
113 | + */ | ||
114 | + List<List<YangLeafList>> resolvedGroupingLeafLists; | ||
115 | + | ||
116 | + /** | ||
99 | * Creates an YANG uses node. | 117 | * Creates an YANG uses node. |
100 | */ | 118 | */ |
101 | public YangUses() { | 119 | public YangUses() { |
102 | super(YangNodeType.USES_NODE); | 120 | super(YangNodeType.USES_NODE); |
103 | nodeIdentifier = new YangNodeIdentifier(); | 121 | nodeIdentifier = new YangNodeIdentifier(); |
104 | resolvableStatus = ResolvableStatus.UNRESOLVED; | 122 | resolvableStatus = ResolvableStatus.UNRESOLVED; |
123 | + resolvedGroupingNodes = new LinkedList<YangNode>(); | ||
124 | + resolvedGroupingLeaves = new LinkedList<List<YangLeaf>>(); | ||
125 | + resolvedGroupingLeafLists = new LinkedList<List<YangLeafList>>(); | ||
105 | } | 126 | } |
106 | 127 | ||
107 | /** | 128 | /** |
... | @@ -277,36 +298,132 @@ public class YangUses | ... | @@ -277,36 +298,132 @@ public class YangUses |
277 | } | 298 | } |
278 | 299 | ||
279 | YangLeavesHolder usesParentLeavesHolder = (YangLeavesHolder) usesParentNode; | 300 | YangLeavesHolder usesParentLeavesHolder = (YangLeavesHolder) usesParentNode; |
280 | - if (referredGrouping.getListOfLeaf() != null) { | 301 | + if (referredGrouping.getListOfLeaf() != null |
281 | - for (YangLeaf leaf : referredGrouping.getListOfLeaf()) { | 302 | + && referredGrouping.getListOfLeaf().size() != 0) { |
282 | - try { | 303 | + addLeavesOfGrouping( |
283 | - ((CollisionDetector) usesParentLeavesHolder).detectCollidingChild(leaf.getName(), | 304 | + cloneLeavesList(referredGrouping.getListOfLeaf(), |
284 | - YangConstructType.LEAF_DATA); | 305 | + usesParentLeavesHolder)); |
285 | - } catch (DataModelException e) { | 306 | + } |
286 | - throw new LinkerException(e.getMessage()); | 307 | + |
308 | + if (referredGrouping.getListOfLeafList() != null | ||
309 | + && referredGrouping.getListOfLeafList().size() != 0) { | ||
310 | + addListOfLeafListOfGrouping( | ||
311 | + cloneListOfLeafList(referredGrouping.getListOfLeafList(), | ||
312 | + usesParentLeavesHolder)); | ||
313 | + } | ||
314 | + | ||
315 | + YangNode childInGrouping = referredGrouping.getChild(); | ||
316 | + | ||
317 | + while (childInGrouping != null) { | ||
318 | + if ((childInGrouping instanceof YangEnumeration) | ||
319 | + || (childInGrouping instanceof YangUnion) | ||
320 | + || (childInGrouping instanceof YangTypeDef)) { | ||
321 | + | ||
322 | + /* | ||
323 | + * No need to copy the leaves, union / enum class, | ||
324 | + * as these will be generated in the scope of grouping | ||
325 | + */ | ||
326 | + childInGrouping = childInGrouping.getNextSibling(); | ||
327 | + continue; | ||
328 | + } else if ((childInGrouping instanceof YangUses)) { | ||
329 | + addResolvedUsesInfoOfGrouping((YangUses) childInGrouping, | ||
330 | + usesParentLeavesHolder); | ||
331 | + } else { | ||
332 | + addNodeOfGrouping(childInGrouping); | ||
333 | + } | ||
334 | + | ||
335 | + childInGrouping = childInGrouping.getNextSibling(); | ||
287 | } | 336 | } |
288 | - usesParentLeavesHolder.addLeaf(leaf); | ||
289 | } | 337 | } |
338 | + | ||
339 | + /** | ||
340 | + * Clone the resolved uses contained in grouping to the uses of grouping. | ||
341 | + * | ||
342 | + * @param usesInGrouping resolved uses in grouping | ||
343 | + * @param usesHolder holder of uses | ||
344 | + */ | ||
345 | + private void addResolvedUsesInfoOfGrouping(YangUses usesInGrouping, | ||
346 | + YangLeavesHolder usesHolder) { | ||
347 | + for (YangNode usesResolvedNode : | ||
348 | + usesInGrouping.getUsesResolvedNodeList()) { | ||
349 | + addNodeOfGrouping(usesResolvedNode); | ||
290 | } | 350 | } |
291 | - if (referredGrouping.getListOfLeafList() != null) { | 351 | + |
292 | - for (YangLeafList leafList : referredGrouping.getListOfLeafList()) { | 352 | + for (List<YangLeaf> leavesList : |
353 | + usesInGrouping.getUsesResolvedLeavesList()) { | ||
354 | + addLeavesOfGrouping(cloneLeavesList(leavesList, usesHolder)); | ||
355 | + } | ||
356 | + | ||
357 | + for (List<YangLeafList> listOfLeafLists : | ||
358 | + usesInGrouping.getUsesResolvedListOfLeafList()) { | ||
359 | + addListOfLeafListOfGrouping( | ||
360 | + cloneListOfLeafList(listOfLeafLists, usesHolder)); | ||
361 | + } | ||
362 | + } | ||
363 | + | ||
364 | + /** | ||
365 | + * Clone the list of leaves and return the cloned list leaves. | ||
366 | + * | ||
367 | + * @param listOfLeaves list of leaves to be cloned | ||
368 | + * @param usesParentNode parent of the cloned location | ||
369 | + * @return cloned list of leaves | ||
370 | + */ | ||
371 | + private List<YangLeaf> cloneLeavesList(List<YangLeaf> listOfLeaves, | ||
372 | + YangLeavesHolder usesParentNode) { | ||
373 | + if ((listOfLeaves == null) || listOfLeaves.size() == 0) { | ||
374 | + throw new LinkerException("No leaves to clone"); | ||
375 | + } | ||
376 | + | ||
377 | + List<YangLeaf> newLeavesList = new LinkedList<YangLeaf>(); | ||
378 | + for (YangLeaf leaf : listOfLeaves) { | ||
379 | + YangLeaf clonedLeaf; | ||
293 | try { | 380 | try { |
294 | - ((CollisionDetector) usesParentLeavesHolder).detectCollidingChild(leafList.getName(), | 381 | + ((CollisionDetector) usesParentNode).detectCollidingChild(leaf.getName(), |
295 | - YangConstructType.LEAF_LIST_DATA); | 382 | + YangConstructType.LEAF_DATA); |
296 | - } catch (DataModelException e) { | 383 | + clonedLeaf = leaf.clone(); |
384 | + } catch (CloneNotSupportedException | DataModelException e) { | ||
297 | throw new LinkerException(e.getMessage()); | 385 | throw new LinkerException(e.getMessage()); |
298 | } | 386 | } |
299 | - usesParentLeavesHolder.addLeafList(leafList); | 387 | + |
388 | + clonedLeaf.setContainedIn(usesParentNode); | ||
389 | + newLeavesList.add(clonedLeaf); | ||
300 | } | 390 | } |
391 | + | ||
392 | + return newLeavesList; | ||
301 | } | 393 | } |
302 | 394 | ||
395 | + /** | ||
396 | + * Clone the list of leaf list. | ||
397 | + * | ||
398 | + * @param listOfLeafList list of leaf list that needs to be cloned | ||
399 | + * @param usesParentNode parent of uses | ||
400 | + * @return cloned list of leaf list | ||
401 | + */ | ||
402 | + private List<YangLeafList> cloneListOfLeafList(List<YangLeafList> listOfLeafList, | ||
403 | + YangLeavesHolder usesParentNode) { | ||
404 | + if ((listOfLeafList == null) || listOfLeafList.size() == 0) { | ||
405 | + throw new LinkerException("No leaf lists to clone"); | ||
406 | + } | ||
407 | + | ||
408 | + List<YangLeafList> newListOfLeafList = new LinkedList<YangLeafList>(); | ||
409 | + for (YangLeafList leafList : listOfLeafList) { | ||
410 | + YangLeafList clonedLeafList; | ||
303 | try { | 411 | try { |
304 | - YangNode.cloneSubTree(getRefGroup(), usesParentNode); | 412 | + ((CollisionDetector) usesParentNode).detectCollidingChild(leafList.getName(), |
305 | - } catch (DataModelException e) { | 413 | + YangConstructType.LEAF_LIST_DATA); |
414 | + clonedLeafList = leafList.clone(); | ||
415 | + } catch (CloneNotSupportedException | DataModelException e) { | ||
306 | throw new LinkerException(e.getMessage()); | 416 | throw new LinkerException(e.getMessage()); |
307 | } | 417 | } |
418 | + | ||
419 | + clonedLeafList.setContainedIn(usesParentNode); | ||
420 | + newListOfLeafList.add(clonedLeafList); | ||
308 | } | 421 | } |
309 | 422 | ||
423 | + return newListOfLeafList; | ||
424 | + } | ||
425 | + | ||
426 | + | ||
310 | @Override | 427 | @Override |
311 | public ResolvableStatus getResolvableStatus() { | 428 | public ResolvableStatus getResolvableStatus() { |
312 | return resolvableStatus; | 429 | return resolvableStatus; |
... | @@ -318,12 +435,14 @@ public class YangUses | ... | @@ -318,12 +435,14 @@ public class YangUses |
318 | } | 435 | } |
319 | 436 | ||
320 | @Override | 437 | @Override |
321 | - public void detectCollidingChild(String identifierName, YangConstructType dataType) throws DataModelException { | 438 | + public void detectCollidingChild(String identifierName, YangConstructType dataType) |
439 | + throws DataModelException { | ||
322 | detectCollidingChildUtil(identifierName, dataType, this); | 440 | detectCollidingChildUtil(identifierName, dataType, this); |
323 | } | 441 | } |
324 | 442 | ||
325 | @Override | 443 | @Override |
326 | - public void detectSelfCollision(String identifierName, YangConstructType dataType) throws DataModelException { | 444 | + public void detectSelfCollision(String identifierName, YangConstructType dataType) |
445 | + throws DataModelException { | ||
327 | 446 | ||
328 | if (getName().equals(identifierName)) { | 447 | if (getName().equals(identifierName)) { |
329 | throw new DataModelException("YANG file error: Duplicate input identifier detected, same as uses \"" | 448 | throw new DataModelException("YANG file error: Duplicate input identifier detected, same as uses \"" |
... | @@ -331,4 +450,61 @@ public class YangUses | ... | @@ -331,4 +450,61 @@ public class YangUses |
331 | } | 450 | } |
332 | } | 451 | } |
333 | 452 | ||
453 | + | ||
454 | + /** | ||
455 | + * Adds the node under grouping to the effective uses resolved info. | ||
456 | + * | ||
457 | + * @param nodeInGrouping node defined under grouping which needs to be copied in | ||
458 | + * the context of uses | ||
459 | + */ | ||
460 | + public void addNodeOfGrouping(YangNode nodeInGrouping) { | ||
461 | + resolvedGroupingNodes.add(nodeInGrouping); | ||
462 | + } | ||
463 | + | ||
464 | + /** | ||
465 | + * Returns the effective list of nodes added due to uses linking. | ||
466 | + * | ||
467 | + * @return effective list of nodes added due to uses linking | ||
468 | + */ | ||
469 | + public List<YangNode> getUsesResolvedNodeList() { | ||
470 | + return resolvedGroupingNodes; | ||
471 | + } | ||
472 | + | ||
473 | + /** | ||
474 | + * Adds the leaves under grouping to the effective uses resolved info. | ||
475 | + * | ||
476 | + * @param leavesInGrouping Leaves defined under grouping which needs to be copied in | ||
477 | + * the context of uses | ||
478 | + */ | ||
479 | + public void addLeavesOfGrouping(List<YangLeaf> leavesInGrouping) { | ||
480 | + resolvedGroupingLeaves.add(leavesInGrouping); | ||
481 | + } | ||
482 | + | ||
483 | + /** | ||
484 | + * Returns the effective list of Leaves added due to uses linking. | ||
485 | + * | ||
486 | + * @return effective list of Leaves added due to uses linking | ||
487 | + */ | ||
488 | + public List<List<YangLeaf>> getUsesResolvedLeavesList() { | ||
489 | + return resolvedGroupingLeaves; | ||
490 | + } | ||
491 | + | ||
492 | + /** | ||
493 | + * Adds the leaf-lists under grouping to the effective uses resolved info. | ||
494 | + * | ||
495 | + * @param leafListsInGrouping leaf-lists defined under grouping which needs to be copied in | ||
496 | + * the context of uses | ||
497 | + */ | ||
498 | + public void addListOfLeafListOfGrouping(List<YangLeafList> leafListsInGrouping) { | ||
499 | + resolvedGroupingLeafLists.add(leafListsInGrouping); | ||
500 | + } | ||
501 | + | ||
502 | + /** | ||
503 | + * Returns the effective list of Leaves added due to uses linking. | ||
504 | + * | ||
505 | + * @return effective list of Leaves added due to uses linking | ||
506 | + */ | ||
507 | + public List<List<YangLeafList>> getUsesResolvedListOfLeafList() { | ||
508 | + return resolvedGroupingLeafLists; | ||
509 | + } | ||
334 | } | 510 | } | ... | ... |
... | @@ -18,15 +18,18 @@ package org.onosproject.yangutils.datamodel.utils; | ... | @@ -18,15 +18,18 @@ package org.onosproject.yangutils.datamodel.utils; |
18 | 18 | ||
19 | import java.util.List; | 19 | import java.util.List; |
20 | import java.util.Set; | 20 | import java.util.Set; |
21 | + | ||
21 | import org.onosproject.yangutils.datamodel.CollisionDetector; | 22 | import org.onosproject.yangutils.datamodel.CollisionDetector; |
22 | import org.onosproject.yangutils.datamodel.YangLeaf; | 23 | import org.onosproject.yangutils.datamodel.YangLeaf; |
23 | import org.onosproject.yangutils.datamodel.YangLeafList; | 24 | import org.onosproject.yangutils.datamodel.YangLeafList; |
24 | import org.onosproject.yangutils.datamodel.YangLeavesHolder; | 25 | import org.onosproject.yangutils.datamodel.YangLeavesHolder; |
25 | import org.onosproject.yangutils.datamodel.YangNode; | 26 | import org.onosproject.yangutils.datamodel.YangNode; |
26 | -import org.onosproject.yangutils.linker.impl.YangReferenceResolver; | ||
27 | -import org.onosproject.yangutils.linker.impl.YangResolutionInfo; | ||
28 | import org.onosproject.yangutils.datamodel.YangRpc; | 27 | import org.onosproject.yangutils.datamodel.YangRpc; |
28 | +import org.onosproject.yangutils.datamodel.YangType; | ||
29 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 29 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; |
30 | +import org.onosproject.yangutils.linker.ResolvableType; | ||
31 | +import org.onosproject.yangutils.linker.YangReferenceResolver; | ||
32 | +import org.onosproject.yangutils.linker.impl.YangResolutionInfo; | ||
30 | import org.onosproject.yangutils.parser.Parsable; | 33 | import org.onosproject.yangutils.parser.Parsable; |
31 | import org.onosproject.yangutils.plugin.manager.YangFileInfo; | 34 | import org.onosproject.yangutils.plugin.manager.YangFileInfo; |
32 | import org.onosproject.yangutils.utils.YangConstructType; | 35 | import org.onosproject.yangutils.utils.YangConstructType; |
... | @@ -45,8 +48,7 @@ public final class DataModelUtils { | ... | @@ -45,8 +48,7 @@ public final class DataModelUtils { |
45 | /** | 48 | /** |
46 | * Detects the colliding identifier name in a given YANG node and its child. | 49 | * Detects the colliding identifier name in a given YANG node and its child. |
47 | * | 50 | * |
48 | - * @param identifierName name for which collision detection is to be | 51 | + * @param identifierName name for which collision detection is to be checked |
49 | - * checked | ||
50 | * @param dataType type of YANG node asking for detecting collision | 52 | * @param dataType type of YANG node asking for detecting collision |
51 | * @param node instance of calling node | 53 | * @param node instance of calling node |
52 | * @throws DataModelException a violation of data model rules | 54 | * @throws DataModelException a violation of data model rules |
... | @@ -77,8 +79,7 @@ public final class DataModelUtils { | ... | @@ -77,8 +79,7 @@ public final class DataModelUtils { |
77 | /** | 79 | /** |
78 | * Detects colliding of uses and grouping only with uses and grouping respectively. | 80 | * Detects colliding of uses and grouping only with uses and grouping respectively. |
79 | * | 81 | * |
80 | - * @param identifierName name for which collision detection is to be | 82 | + * @param identifierName name for which collision detection is to be checked |
81 | - * checked | ||
82 | * @param dataType type of YANG node asking for detecting collision | 83 | * @param dataType type of YANG node asking for detecting collision |
83 | * @param node node instance of calling node | 84 | * @param node node instance of calling node |
84 | * @throws DataModelException a violation of data model rules | 85 | * @throws DataModelException a violation of data model rules |
... | @@ -101,8 +102,7 @@ public final class DataModelUtils { | ... | @@ -101,8 +102,7 @@ public final class DataModelUtils { |
101 | * Detects the colliding identifier name in a given leaf node. | 102 | * Detects the colliding identifier name in a given leaf node. |
102 | * | 103 | * |
103 | * @param listOfLeaf List of leaves to detect collision | 104 | * @param listOfLeaf List of leaves to detect collision |
104 | - * @param identifierName name for which collision detection is to be | 105 | + * @param identifierName name for which collision detection is to be checked |
105 | - * checked | ||
106 | * @throws DataModelException a violation of data model rules | 106 | * @throws DataModelException a violation of data model rules |
107 | */ | 107 | */ |
108 | private static void detectCollidingLeaf(List<YangLeaf> listOfLeaf, String identifierName) | 108 | private static void detectCollidingLeaf(List<YangLeaf> listOfLeaf, String identifierName) |
... | @@ -123,8 +123,7 @@ public final class DataModelUtils { | ... | @@ -123,8 +123,7 @@ public final class DataModelUtils { |
123 | * Detects the colliding identifier name in a given leaf-list node. | 123 | * Detects the colliding identifier name in a given leaf-list node. |
124 | * | 124 | * |
125 | * @param listOfLeafList list of leaf-lists to detect collision | 125 | * @param listOfLeafList list of leaf-lists to detect collision |
126 | - * @param identifierName name for which collision detection is to be | 126 | + * @param identifierName name for which collision detection is to be checked |
127 | - * checked | ||
128 | * @throws DataModelException a violation of data model rules | 127 | * @throws DataModelException a violation of data model rules |
129 | */ | 128 | */ |
130 | private static void detectCollidingLeafList(List<YangLeafList> listOfLeafList, String identifierName) | 129 | private static void detectCollidingLeafList(List<YangLeafList> listOfLeafList, String identifierName) |
... | @@ -144,8 +143,7 @@ public final class DataModelUtils { | ... | @@ -144,8 +143,7 @@ public final class DataModelUtils { |
144 | /** | 143 | /** |
145 | * Add a resolution information. | 144 | * Add a resolution information. |
146 | * | 145 | * |
147 | - * @param resolutionInfo information about the YANG construct which has to | 146 | + * @param resolutionInfo information about the YANG construct which has to be resolved |
148 | - * be resolved | ||
149 | * @throws DataModelException a violation of data model rules | 147 | * @throws DataModelException a violation of data model rules |
150 | */ | 148 | */ |
151 | public static void addResolutionInfo(YangResolutionInfo resolutionInfo) | 149 | public static void addResolutionInfo(YangResolutionInfo resolutionInfo) |
... | @@ -162,7 +160,15 @@ public final class DataModelUtils { | ... | @@ -162,7 +160,15 @@ public final class DataModelUtils { |
162 | } | 160 | } |
163 | YangReferenceResolver resolutionNode = (YangReferenceResolver) curNode; | 161 | YangReferenceResolver resolutionNode = (YangReferenceResolver) curNode; |
164 | 162 | ||
165 | - resolutionNode.addToResolutionList(resolutionInfo); | 163 | + if (resolutionInfo.getEntityToResolveInfo() |
164 | + .getEntityToResolve() instanceof YangType) { | ||
165 | + resolutionNode.addToResolutionList(resolutionInfo, | ||
166 | + ResolvableType.YANG_DERIVED_DATA_TYPE); | ||
167 | + } else { | ||
168 | + resolutionNode.addToResolutionList(resolutionInfo, | ||
169 | + ResolvableType.YANG_USES); | ||
170 | + } | ||
171 | + | ||
166 | } | 172 | } |
167 | 173 | ||
168 | /** | 174 | /** | ... | ... |
... | @@ -14,7 +14,7 @@ | ... | @@ -14,7 +14,7 @@ |
14 | * limitations under the License. | 14 | * limitations under the License. |
15 | */ | 15 | */ |
16 | 16 | ||
17 | -package org.onosproject.yangutils.linker.impl; | 17 | +package org.onosproject.yangutils.linker; |
18 | 18 | ||
19 | import org.onosproject.yangutils.linker.exceptions.LinkerException; | 19 | import org.onosproject.yangutils.linker.exceptions.LinkerException; |
20 | 20 | ... | ... |
... | @@ -14,7 +14,7 @@ | ... | @@ -14,7 +14,7 @@ |
14 | * limitations under the License. | 14 | * limitations under the License. |
15 | */ | 15 | */ |
16 | 16 | ||
17 | -package org.onosproject.yangutils.linker.impl; | 17 | +package org.onosproject.yangutils.linker; |
18 | 18 | ||
19 | /** | 19 | /** |
20 | * Represents the status of resolvable entity. | 20 | * Represents the status of resolvable entity. | ... | ... |
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.linker; | ||
18 | + | ||
19 | +/** | ||
20 | + * Type of the resolvable info. | ||
21 | + */ | ||
22 | +public enum ResolvableType { | ||
23 | + | ||
24 | + /** | ||
25 | + * Identifies the derived data type. | ||
26 | + */ | ||
27 | + YANG_DERIVED_DATA_TYPE, | ||
28 | + | ||
29 | + /** | ||
30 | + * Identifies the uses. | ||
31 | + */ | ||
32 | + YANG_USES | ||
33 | +} |
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.linker; | ||
18 | + | ||
19 | +/** | ||
20 | + * Represents the phase of YANG file reference linking. | ||
21 | + */ | ||
22 | +public enum YangLinkingPhase { | ||
23 | + | ||
24 | + /** | ||
25 | + * Linking the reference within the files. | ||
26 | + */ | ||
27 | + INTRA_FILE, | ||
28 | + | ||
29 | + /** | ||
30 | + * Linking the reference across the files. | ||
31 | + */ | ||
32 | + INTER_FILE | ||
33 | + | ||
34 | +} |
... | @@ -14,14 +14,16 @@ | ... | @@ -14,14 +14,16 @@ |
14 | * limitations under the License. | 14 | * limitations under the License. |
15 | */ | 15 | */ |
16 | 16 | ||
17 | -package org.onosproject.yangutils.linker.impl; | 17 | +package org.onosproject.yangutils.linker; |
18 | 18 | ||
19 | import java.util.List; | 19 | import java.util.List; |
20 | import java.util.Set; | 20 | import java.util.Set; |
21 | + | ||
21 | import org.onosproject.yangutils.datamodel.YangImport; | 22 | import org.onosproject.yangutils.datamodel.YangImport; |
22 | import org.onosproject.yangutils.datamodel.YangInclude; | 23 | import org.onosproject.yangutils.datamodel.YangInclude; |
23 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 24 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; |
24 | import org.onosproject.yangutils.linker.exceptions.LinkerException; | 25 | import org.onosproject.yangutils.linker.exceptions.LinkerException; |
26 | +import org.onosproject.yangutils.linker.impl.YangResolutionInfo; | ||
25 | import org.onosproject.yangutils.plugin.manager.YangFileInfo; | 27 | import org.onosproject.yangutils.plugin.manager.YangFileInfo; |
26 | 28 | ||
27 | /** | 29 | /** |
... | @@ -33,23 +35,26 @@ public interface YangReferenceResolver { | ... | @@ -33,23 +35,26 @@ public interface YangReferenceResolver { |
33 | /** | 35 | /** |
34 | * Returns unresolved resolution list. | 36 | * Returns unresolved resolution list. |
35 | * | 37 | * |
36 | - * @return unresolved resolution list | 38 | + * @param type resolvable type |
39 | + * @return list of resolution information objects | ||
37 | */ | 40 | */ |
38 | - List<YangResolutionInfo> getUnresolvedResolutionList(); | 41 | + List<YangResolutionInfo> getUnresolvedResolutionList(ResolvableType type); |
39 | 42 | ||
40 | /** | 43 | /** |
41 | * Adds to the resolution list. | 44 | * Adds to the resolution list. |
42 | * | 45 | * |
43 | * @param resolutionInfo resolution information | 46 | * @param resolutionInfo resolution information |
47 | + * @param type resolvable type | ||
44 | */ | 48 | */ |
45 | - void addToResolutionList(YangResolutionInfo resolutionInfo); | 49 | + void addToResolutionList(YangResolutionInfo resolutionInfo, ResolvableType type); |
46 | 50 | ||
47 | /** | 51 | /** |
48 | * Creates resolution list. | 52 | * Creates resolution list. |
49 | * | 53 | * |
50 | * @param resolutionList resolution list | 54 | * @param resolutionList resolution list |
55 | + * @param type resolvable type | ||
51 | */ | 56 | */ |
52 | - void setResolutionList(List<YangResolutionInfo> resolutionList); | 57 | + void setResolutionList(List<YangResolutionInfo> resolutionList, ResolvableType type); |
53 | 58 | ||
54 | /** | 59 | /** |
55 | * Returns unresolved imported list. | 60 | * Returns unresolved imported list. |
... | @@ -110,16 +115,20 @@ public interface YangReferenceResolver { | ... | @@ -110,16 +115,20 @@ public interface YangReferenceResolver { |
110 | /** | 115 | /** |
111 | * Resolves self file linking. | 116 | * Resolves self file linking. |
112 | * | 117 | * |
118 | + * @param type resolvable type | ||
113 | * @throws DataModelException a violation in data model rule | 119 | * @throws DataModelException a violation in data model rule |
114 | */ | 120 | */ |
115 | - void resolveSelfFileLinking() throws DataModelException; | 121 | + void resolveSelfFileLinking(ResolvableType type) |
122 | + throws DataModelException; | ||
116 | 123 | ||
117 | /** | 124 | /** |
118 | * Resolves inter file linking. | 125 | * Resolves inter file linking. |
119 | * | 126 | * |
127 | + * @param type resolvable type | ||
120 | * @throws DataModelException a violation in data model rule | 128 | * @throws DataModelException a violation in data model rule |
121 | */ | 129 | */ |
122 | - void resolveInterFileLinking() throws DataModelException; | 130 | + void resolveInterFileLinking(ResolvableType type) |
131 | + throws DataModelException; | ||
123 | 132 | ||
124 | /** | 133 | /** |
125 | * Adds references to include. | 134 | * Adds references to include. |
... | @@ -127,7 +136,8 @@ public interface YangReferenceResolver { | ... | @@ -127,7 +136,8 @@ public interface YangReferenceResolver { |
127 | * @param yangFileInfoSet YANG file info set | 136 | * @param yangFileInfoSet YANG file info set |
128 | * @throws LinkerException a violation of linker rules | 137 | * @throws LinkerException a violation of linker rules |
129 | */ | 138 | */ |
130 | - void addReferencesToIncludeList(Set<YangFileInfo> yangFileInfoSet) throws LinkerException; | 139 | + void addReferencesToIncludeList(Set<YangFileInfo> yangFileInfoSet) |
140 | + throws LinkerException; | ||
131 | 141 | ||
132 | /** | 142 | /** |
133 | * Adds references to import. | 143 | * Adds references to import. |
... | @@ -135,5 +145,6 @@ public interface YangReferenceResolver { | ... | @@ -135,5 +145,6 @@ public interface YangReferenceResolver { |
135 | * @param yangFileInfoSet YANG file info set | 145 | * @param yangFileInfoSet YANG file info set |
136 | * @throws LinkerException a violation of linker rules | 146 | * @throws LinkerException a violation of linker rules |
137 | */ | 147 | */ |
138 | - void addReferencesToImportList(Set<YangFileInfo> yangFileInfoSet) throws LinkerException; | 148 | + void addReferencesToImportList(Set<YangFileInfo> yangFileInfoSet) |
149 | + throws LinkerException; | ||
139 | } | 150 | } | ... | ... |
... | @@ -17,10 +17,13 @@ | ... | @@ -17,10 +17,13 @@ |
17 | package org.onosproject.yangutils.linker.impl; | 17 | package org.onosproject.yangutils.linker.impl; |
18 | 18 | ||
19 | import java.util.Set; | 19 | import java.util.Set; |
20 | + | ||
20 | import org.onosproject.yangutils.datamodel.YangNode; | 21 | import org.onosproject.yangutils.datamodel.YangNode; |
21 | import org.onosproject.yangutils.datamodel.YangSubModule; | 22 | import org.onosproject.yangutils.datamodel.YangSubModule; |
22 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 23 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; |
24 | +import org.onosproject.yangutils.linker.ResolvableType; | ||
23 | import org.onosproject.yangutils.linker.YangLinker; | 25 | import org.onosproject.yangutils.linker.YangLinker; |
26 | +import org.onosproject.yangutils.linker.YangReferenceResolver; | ||
24 | import org.onosproject.yangutils.linker.exceptions.LinkerException; | 27 | import org.onosproject.yangutils.linker.exceptions.LinkerException; |
25 | import org.onosproject.yangutils.plugin.manager.YangFileInfo; | 28 | import org.onosproject.yangutils.plugin.manager.YangFileInfo; |
26 | 29 | ||
... | @@ -29,7 +32,8 @@ import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE; | ... | @@ -29,7 +32,8 @@ import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE; |
29 | /** | 32 | /** |
30 | * Representation of entity which provides linking service of YANG files. | 33 | * Representation of entity which provides linking service of YANG files. |
31 | */ | 34 | */ |
32 | -public class YangLinkerManager implements YangLinker { | 35 | +public class YangLinkerManager |
36 | + implements YangLinker { | ||
33 | @Override | 37 | @Override |
34 | public void resolveDependencies(Set<YangFileInfo> yangFileInfoSet) { | 38 | public void resolveDependencies(Set<YangFileInfo> yangFileInfoSet) { |
35 | 39 | ||
... | @@ -54,7 +58,8 @@ public class YangLinkerManager implements YangLinker { | ... | @@ -54,7 +58,8 @@ public class YangLinkerManager implements YangLinker { |
54 | * @param yangFileInfoSet set of YANG files info | 58 | * @param yangFileInfoSet set of YANG files info |
55 | * @throws LinkerException fails to link sub-module to parent module | 59 | * @throws LinkerException fails to link sub-module to parent module |
56 | */ | 60 | */ |
57 | - public void linkSubModulesToParentModule(Set<YangFileInfo> yangFileInfoSet) throws LinkerException { | 61 | + public void linkSubModulesToParentModule(Set<YangFileInfo> yangFileInfoSet) |
62 | + throws LinkerException { | ||
58 | for (YangFileInfo yangFileInfo : yangFileInfoSet) { | 63 | for (YangFileInfo yangFileInfo : yangFileInfoSet) { |
59 | YangNode yangNode = yangFileInfo.getRootNode(); | 64 | YangNode yangNode = yangFileInfo.getRootNode(); |
60 | if (yangNode instanceof YangSubModule) { | 65 | if (yangNode instanceof YangSubModule) { |
... | @@ -106,10 +111,13 @@ public class YangLinkerManager implements YangLinker { | ... | @@ -106,10 +111,13 @@ public class YangLinkerManager implements YangLinker { |
106 | * @param yangFileInfoSet set of YANG files info | 111 | * @param yangFileInfoSet set of YANG files info |
107 | * @throws LinkerException a violation in linker execution | 112 | * @throws LinkerException a violation in linker execution |
108 | */ | 113 | */ |
109 | - public void processInterFileLinking(Set<YangFileInfo> yangFileInfoSet) throws LinkerException { | 114 | + public void processInterFileLinking(Set<YangFileInfo> yangFileInfoSet) |
115 | + throws LinkerException { | ||
110 | for (YangFileInfo yangFileInfo : yangFileInfoSet) { | 116 | for (YangFileInfo yangFileInfo : yangFileInfoSet) { |
111 | try { | 117 | try { |
112 | - ((YangReferenceResolver) yangFileInfo.getRootNode()).resolveInterFileLinking(); | 118 | + ((YangReferenceResolver) yangFileInfo.getRootNode()).resolveInterFileLinking(ResolvableType.YANG_USES); |
119 | + ((YangReferenceResolver) yangFileInfo.getRootNode()) | ||
120 | + .resolveInterFileLinking(ResolvableType.YANG_DERIVED_DATA_TYPE); | ||
113 | } catch (DataModelException e) { | 121 | } catch (DataModelException e) { |
114 | String errorInfo = "Error in file: " + yangFileInfo.getYangFileName() + " at line: " | 122 | String errorInfo = "Error in file: " + yangFileInfo.getYangFileName() + " at line: " |
115 | + e.getLineNumber() + " at position: " + e.getCharPositionInLine() + NEW_LINE + e.getMessage(); | 123 | + e.getLineNumber() + " at position: " + e.getCharPositionInLine() + NEW_LINE + e.getMessage(); | ... | ... |
... | @@ -17,6 +17,7 @@ | ... | @@ -17,6 +17,7 @@ |
17 | package org.onosproject.yangutils.linker.impl; | 17 | package org.onosproject.yangutils.linker.impl; |
18 | 18 | ||
19 | import java.util.Stack; | 19 | import java.util.Stack; |
20 | + | ||
20 | import org.onosproject.yangutils.datamodel.LocationInfo; | 21 | import org.onosproject.yangutils.datamodel.LocationInfo; |
21 | import org.onosproject.yangutils.datamodel.YangDataTypes; | 22 | import org.onosproject.yangutils.datamodel.YangDataTypes; |
22 | import org.onosproject.yangutils.datamodel.YangDerivedInfo; | 23 | import org.onosproject.yangutils.datamodel.YangDerivedInfo; |
... | @@ -28,12 +29,18 @@ import org.onosproject.yangutils.datamodel.YangType; | ... | @@ -28,12 +29,18 @@ import org.onosproject.yangutils.datamodel.YangType; |
28 | import org.onosproject.yangutils.datamodel.YangTypeDef; | 29 | import org.onosproject.yangutils.datamodel.YangTypeDef; |
29 | import org.onosproject.yangutils.datamodel.YangUses; | 30 | import org.onosproject.yangutils.datamodel.YangUses; |
30 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 31 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; |
31 | - | 32 | +import org.onosproject.yangutils.linker.Resolvable; |
32 | -import static org.onosproject.yangutils.linker.impl.ResolvableStatus.INTER_FILE_LINKED; | 33 | +import org.onosproject.yangutils.linker.ResolvableStatus; |
33 | -import static org.onosproject.yangutils.linker.impl.ResolvableStatus.INTRA_FILE_RESOLVED; | 34 | +import org.onosproject.yangutils.linker.YangLinkingPhase; |
34 | -import static org.onosproject.yangutils.linker.impl.ResolvableStatus.LINKED; | 35 | +import org.onosproject.yangutils.linker.YangReferenceResolver; |
35 | -import static org.onosproject.yangutils.linker.impl.ResolvableStatus.RESOLVED; | 36 | + |
36 | -import static org.onosproject.yangutils.linker.impl.ResolvableStatus.UNRESOLVED; | 37 | +import static org.onosproject.yangutils.linker.ResolvableStatus.INTER_FILE_LINKED; |
38 | +import static org.onosproject.yangutils.linker.ResolvableStatus.INTRA_FILE_RESOLVED; | ||
39 | +import static org.onosproject.yangutils.linker.ResolvableStatus.LINKED; | ||
40 | +import static org.onosproject.yangutils.linker.ResolvableStatus.RESOLVED; | ||
41 | +import static org.onosproject.yangutils.linker.ResolvableStatus.UNRESOLVED; | ||
42 | +import static org.onosproject.yangutils.linker.YangLinkingPhase.INTER_FILE; | ||
43 | +import static org.onosproject.yangutils.linker.YangLinkingPhase.INTRA_FILE; | ||
37 | import static org.onosproject.yangutils.utils.UtilConstants.TYPEDEF_LINKER_ERROR; | 44 | import static org.onosproject.yangutils.utils.UtilConstants.TYPEDEF_LINKER_ERROR; |
38 | import static org.onosproject.yangutils.utils.UtilConstants.GROUPING_LINKER_ERROR; | 45 | import static org.onosproject.yangutils.utils.UtilConstants.GROUPING_LINKER_ERROR; |
39 | 46 | ||
... | @@ -42,7 +49,8 @@ import static org.onosproject.yangutils.utils.UtilConstants.GROUPING_LINKER_ERRO | ... | @@ -42,7 +49,8 @@ import static org.onosproject.yangutils.utils.UtilConstants.GROUPING_LINKER_ERRO |
42 | * | 49 | * |
43 | * @param <T> type of resolution entity uses / type | 50 | * @param <T> type of resolution entity uses / type |
44 | */ | 51 | */ |
45 | -public class YangResolutionInfo<T> implements LocationInfo { | 52 | +public class YangResolutionInfo<T> |
53 | + implements LocationInfo { | ||
46 | 54 | ||
47 | /** | 55 | /** |
48 | * Information about the entity that needs to be resolved. | 56 | * Information about the entity that needs to be resolved. |
... | @@ -164,7 +172,7 @@ public class YangResolutionInfo<T> implements LocationInfo { | ... | @@ -164,7 +172,7 @@ public class YangResolutionInfo<T> implements LocationInfo { |
164 | * resolve the references and pop the entity and | 172 | * resolve the references and pop the entity and |
165 | * continue with remaining stack elements to resolve. | 173 | * continue with remaining stack elements to resolve. |
166 | */ | 174 | */ |
167 | - resolveTopOfStack(); | 175 | + resolveTopOfStack(INTRA_FILE); |
168 | getPartialResolvedStack().pop(); | 176 | getPartialResolvedStack().pop(); |
169 | break; | 177 | break; |
170 | } | 178 | } |
... | @@ -213,7 +221,7 @@ public class YangResolutionInfo<T> implements LocationInfo { | ... | @@ -213,7 +221,7 @@ public class YangResolutionInfo<T> implements LocationInfo { |
213 | /** | 221 | /** |
214 | * Resolves the current entity in the stack. | 222 | * Resolves the current entity in the stack. |
215 | */ | 223 | */ |
216 | - private void resolveTopOfStack() | 224 | + private void resolveTopOfStack(YangLinkingPhase linkingPhase) |
217 | throws DataModelException { | 225 | throws DataModelException { |
218 | ((Resolvable) getCurrentEntityToResolveFromStack()).resolve(); | 226 | ((Resolvable) getCurrentEntityToResolveFromStack()).resolve(); |
219 | if (((Resolvable) getCurrentEntityToResolveFromStack()).getResolvableStatus() | 227 | if (((Resolvable) getCurrentEntityToResolveFromStack()).getResolvableStatus() |
... | @@ -280,7 +288,8 @@ public class YangResolutionInfo<T> implements LocationInfo { | ... | @@ -280,7 +288,8 @@ public class YangResolutionInfo<T> implements LocationInfo { |
280 | * @return true if self file reference, false otherwise | 288 | * @return true if self file reference, false otherwise |
281 | * @throws DataModelException a violation of data model rules | 289 | * @throws DataModelException a violation of data model rules |
282 | */ | 290 | */ |
283 | - private boolean isCandidateForSelfFileReference() throws DataModelException { | 291 | + private boolean isCandidateForSelfFileReference() |
292 | + throws DataModelException { | ||
284 | String prefix = getRefPrefix(); | 293 | String prefix = getRefPrefix(); |
285 | return prefix == null || prefix.contentEquals(getCurReferenceResolver().getPrefix()); | 294 | return prefix == null || prefix.contentEquals(getCurReferenceResolver().getPrefix()); |
286 | } | 295 | } |
... | @@ -598,7 +607,8 @@ public class YangResolutionInfo<T> implements LocationInfo { | ... | @@ -598,7 +607,8 @@ public class YangResolutionInfo<T> implements LocationInfo { |
598 | * @return referenced prefix of entity under resolution | 607 | * @return referenced prefix of entity under resolution |
599 | * @throws DataModelException a violation in data model rule | 608 | * @throws DataModelException a violation in data model rule |
600 | */ | 609 | */ |
601 | - private String getRefPrefix() throws DataModelException { | 610 | + private String getRefPrefix() |
611 | + throws DataModelException { | ||
602 | String refPrefix; | 612 | String refPrefix; |
603 | if (getCurrentEntityToResolveFromStack() instanceof YangType) { | 613 | if (getCurrentEntityToResolveFromStack() instanceof YangType) { |
604 | refPrefix = ((YangType<?>) getCurrentEntityToResolveFromStack()).getPrefix(); | 614 | refPrefix = ((YangType<?>) getCurrentEntityToResolveFromStack()).getPrefix(); |
... | @@ -643,7 +653,7 @@ public class YangResolutionInfo<T> implements LocationInfo { | ... | @@ -643,7 +653,7 @@ public class YangResolutionInfo<T> implements LocationInfo { |
643 | * resolve the references and pop the entity and | 653 | * resolve the references and pop the entity and |
644 | * continue with remaining stack elements to resolve | 654 | * continue with remaining stack elements to resolve |
645 | */ | 655 | */ |
646 | - resolveTopOfStack(); | 656 | + resolveTopOfStack(INTER_FILE); |
647 | getPartialResolvedStack().pop(); | 657 | getPartialResolvedStack().pop(); |
648 | break; | 658 | break; |
649 | } | 659 | } |
... | @@ -679,7 +689,8 @@ public class YangResolutionInfo<T> implements LocationInfo { | ... | @@ -679,7 +689,8 @@ public class YangResolutionInfo<T> implements LocationInfo { |
679 | * | 689 | * |
680 | * @throws DataModelException data model error | 690 | * @throws DataModelException data model error |
681 | */ | 691 | */ |
682 | - private void linkInterFileTopOfStackRefUpdateStack() throws DataModelException { | 692 | + private void linkInterFileTopOfStackRefUpdateStack() |
693 | + throws DataModelException { | ||
683 | 694 | ||
684 | /* | 695 | /* |
685 | * Obtain the referred node of top of stack entity under resolution | 696 | * Obtain the referred node of top of stack entity under resolution |
... | @@ -727,7 +738,8 @@ public class YangResolutionInfo<T> implements LocationInfo { | ... | @@ -727,7 +738,8 @@ public class YangResolutionInfo<T> implements LocationInfo { |
727 | * @return true if resolved, false otherwise | 738 | * @return true if resolved, false otherwise |
728 | * @throws DataModelException a violation in data model rule | 739 | * @throws DataModelException a violation in data model rule |
729 | */ | 740 | */ |
730 | - private boolean resolveWithInclude() throws DataModelException { | 741 | + private boolean resolveWithInclude() |
742 | + throws DataModelException { | ||
731 | /* | 743 | /* |
732 | * Run through all the nodes in include list and search for referred | 744 | * Run through all the nodes in include list and search for referred |
733 | * typedef/grouping at the root level. | 745 | * typedef/grouping at the root level. |
... | @@ -762,7 +774,8 @@ public class YangResolutionInfo<T> implements LocationInfo { | ... | @@ -762,7 +774,8 @@ public class YangResolutionInfo<T> implements LocationInfo { |
762 | * @return true if resolved, false otherwise | 774 | * @return true if resolved, false otherwise |
763 | * @throws DataModelException a violation in data model rule | 775 | * @throws DataModelException a violation in data model rule |
764 | */ | 776 | */ |
765 | - private boolean resolveWithImport() throws DataModelException { | 777 | + private boolean resolveWithImport() |
778 | + throws DataModelException { | ||
766 | /* | 779 | /* |
767 | * Run through import list to find the referred typedef/grouping. | 780 | * Run through import list to find the referred typedef/grouping. |
768 | */ | 781 | */ |
... | @@ -808,7 +821,8 @@ public class YangResolutionInfo<T> implements LocationInfo { | ... | @@ -808,7 +821,8 @@ public class YangResolutionInfo<T> implements LocationInfo { |
808 | * @return referred typedef/grouping node | 821 | * @return referred typedef/grouping node |
809 | * @throws DataModelException a violation in data model rule | 822 | * @throws DataModelException a violation in data model rule |
810 | */ | 823 | */ |
811 | - private T getRefNode() throws DataModelException { | 824 | + private T getRefNode() |
825 | + throws DataModelException { | ||
812 | if (getCurrentEntityToResolveFromStack() instanceof YangType) { | 826 | if (getCurrentEntityToResolveFromStack() instanceof YangType) { |
813 | YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) | 827 | YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) |
814 | ((YangType<?>) getCurrentEntityToResolveFromStack()).getDataTypeExtendedInfo(); | 828 | ((YangType<?>) getCurrentEntityToResolveFromStack()).getDataTypeExtendedInfo(); | ... | ... |
... | @@ -39,8 +39,10 @@ import static org.onosproject.yangutils.parser.impl.parserutils.AugmentListenerU | ... | @@ -39,8 +39,10 @@ import static org.onosproject.yangutils.parser.impl.parserutils.AugmentListenerU |
39 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil; | 39 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil; |
40 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; | 40 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; |
41 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT; | 41 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT; |
42 | -import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage; | 42 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction |
43 | -import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage; | 43 | + .constructExtendedListenerErrorMessage; |
44 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction | ||
45 | + .constructListenerErrorMessage; | ||
44 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER; | 46 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER; |
45 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER; | 47 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER; |
46 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER; | 48 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER; |
... | @@ -120,7 +122,8 @@ public final class AugmentListener { | ... | @@ -120,7 +122,8 @@ public final class AugmentListener { |
120 | YangNode curNode = (YangNode) curData; | 122 | YangNode curNode = (YangNode) curData; |
121 | YangAugment yangAugment = getYangAugmentNode(JAVA_GENERATION); | 123 | YangAugment yangAugment = getYangAugmentNode(JAVA_GENERATION); |
122 | 124 | ||
123 | - validateTargetNodePath(targetNodes, curNode, ctx); | 125 | + //validateTargetNodePath(targetNodes, curNode, ctx); |
126 | + // TODO: handle in linker. | ||
124 | 127 | ||
125 | yangAugment.setTargetNode(targetNodes); | 128 | yangAugment.setTargetNode(targetNodes); |
126 | yangAugment.setName(generateNameForAugmentNode(curData, targetNodes, listener)); | 129 | yangAugment.setName(generateNameForAugmentNode(curData, targetNodes, listener)); |
... | @@ -177,8 +180,8 @@ public final class AugmentListener { | ... | @@ -177,8 +180,8 @@ public final class AugmentListener { |
177 | * Validates whether the current target node path is correct or not. | 180 | * Validates whether the current target node path is correct or not. |
178 | * | 181 | * |
179 | * @param targetNodes list of target nodes | 182 | * @param targetNodes list of target nodes |
180 | - * @param line line in YANG file | 183 | + * @param curNode current Node |
181 | - * @param charPositionInLine char position in YANG file | 184 | + * @param ctx augment context |
182 | * @param curNode current YANG node | 185 | * @param curNode current YANG node |
183 | */ | 186 | */ |
184 | private static void validateTargetNodePath(List<YangNodeIdentifier> targetNodes, YangNode curNode, | 187 | private static void validateTargetNodePath(List<YangNodeIdentifier> targetNodes, YangNode curNode, |
... | @@ -189,7 +192,8 @@ public final class AugmentListener { | ... | @@ -189,7 +192,8 @@ public final class AugmentListener { |
189 | if (!moduleId.getName().equals(curNode.getName())) { | 192 | if (!moduleId.getName().equals(curNode.getName())) { |
190 | throw parserException(ctx); | 193 | throw parserException(ctx); |
191 | } else { | 194 | } else { |
192 | - validateNodeInTargetPath(curNode, targetNodes, ctx); | 195 | + //validateNodeInTargetPath(curNode, targetNodes, ctx); |
196 | + // TODO: handle in linker. | ||
193 | } | 197 | } |
194 | } else { | 198 | } else { |
195 | String parentPrefix = getParentsPrefix(curNode); | 199 | String parentPrefix = getParentsPrefix(curNode); | ... | ... |
... | @@ -113,11 +113,12 @@ public final class LeafListListener { | ... | @@ -113,11 +113,12 @@ public final class LeafListListener { |
113 | leafList.setLeafName(identifier); | 113 | leafList.setLeafName(identifier); |
114 | 114 | ||
115 | Parsable tmpData = listener.getParsedDataStack().peek(); | 115 | Parsable tmpData = listener.getParsedDataStack().peek(); |
116 | - YangLeavesHolder leaves; | 116 | + YangLeavesHolder leavesHolder; |
117 | 117 | ||
118 | if (tmpData instanceof YangLeavesHolder) { | 118 | if (tmpData instanceof YangLeavesHolder) { |
119 | - leaves = (YangLeavesHolder) tmpData; | 119 | + leavesHolder = (YangLeavesHolder) tmpData; |
120 | - leaves.addLeafList(leafList); | 120 | + leavesHolder.addLeafList(leafList); |
121 | + leafList.setContainedIn(leavesHolder); | ||
121 | } else { | 122 | } else { |
122 | throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LEAF_LIST_DATA, | 123 | throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LEAF_LIST_DATA, |
123 | ctx.identifier().getText(), ENTRY)); | 124 | ctx.identifier().getText(), ENTRY)); | ... | ... |
... | @@ -115,11 +115,12 @@ public final class LeafListener { | ... | @@ -115,11 +115,12 @@ public final class LeafListener { |
115 | leaf.setLeafName(identifier); | 115 | leaf.setLeafName(identifier); |
116 | 116 | ||
117 | Parsable tmpData = listener.getParsedDataStack().peek(); | 117 | Parsable tmpData = listener.getParsedDataStack().peek(); |
118 | - YangLeavesHolder leaves; | 118 | + YangLeavesHolder leavesHolder; |
119 | 119 | ||
120 | if (tmpData instanceof YangLeavesHolder) { | 120 | if (tmpData instanceof YangLeavesHolder) { |
121 | - leaves = (YangLeavesHolder) tmpData; | 121 | + leavesHolder = (YangLeavesHolder) tmpData; |
122 | - leaves.addLeaf(leaf); | 122 | + leavesHolder.addLeaf(leaf); |
123 | + leaf.setContainedIn(leavesHolder); | ||
123 | } else { | 124 | } else { |
124 | throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LEAF_DATA, | 125 | throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LEAF_DATA, |
125 | ctx.identifier().getText(), ENTRY)); | 126 | ctx.identifier().getText(), ENTRY)); | ... | ... |
... | @@ -16,10 +16,11 @@ | ... | @@ -16,10 +16,11 @@ |
16 | 16 | ||
17 | package org.onosproject.yangutils.parser.impl.listeners; | 17 | package org.onosproject.yangutils.parser.impl.listeners; |
18 | 18 | ||
19 | -import org.onosproject.yangutils.linker.impl.YangReferenceResolver; | ||
20 | import org.onosproject.yangutils.datamodel.YangModule; | 19 | import org.onosproject.yangutils.datamodel.YangModule; |
21 | import org.onosproject.yangutils.datamodel.YangRevision; | 20 | import org.onosproject.yangutils.datamodel.YangRevision; |
22 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 21 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; |
22 | +import org.onosproject.yangutils.linker.ResolvableType; | ||
23 | +import org.onosproject.yangutils.linker.YangReferenceResolver; | ||
23 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; | 24 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; |
24 | import org.onosproject.yangutils.parser.exceptions.ParserException; | 25 | import org.onosproject.yangutils.parser.exceptions.ParserException; |
25 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; | 26 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; |
... | @@ -28,7 +29,8 @@ import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_G | ... | @@ -28,7 +29,8 @@ import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_G |
28 | import static org.onosproject.yangutils.datamodel.utils.YangDataModelFactory.getYangModuleNode; | 29 | import static org.onosproject.yangutils.datamodel.utils.YangDataModelFactory.getYangModuleNode; |
29 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; | 30 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; |
30 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT; | 31 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT; |
31 | -import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage; | 32 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction |
33 | + .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; |
33 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_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; |
... | @@ -116,7 +118,10 @@ public final class ModuleListener { | ... | @@ -116,7 +118,10 @@ public final class ModuleListener { |
116 | ctx.identifier().getText(), EXIT)); | 118 | ctx.identifier().getText(), EXIT)); |
117 | } | 119 | } |
118 | try { | 120 | try { |
119 | - ((YangReferenceResolver) listener.getParsedDataStack().peek()).resolveSelfFileLinking(); | 121 | + ((YangReferenceResolver) listener.getParsedDataStack() |
122 | + .peek()).resolveSelfFileLinking(ResolvableType.YANG_USES); | ||
123 | + ((YangReferenceResolver) listener.getParsedDataStack() | ||
124 | + .peek()).resolveSelfFileLinking(ResolvableType.YANG_DERIVED_DATA_TYPE); | ||
120 | } catch (DataModelException e) { | 125 | } catch (DataModelException e) { |
121 | ParserException parserException = new ParserException(e.getMessage()); | 126 | ParserException parserException = new ParserException(e.getMessage()); |
122 | parserException.setLine(e.getLineNumber()); | 127 | parserException.setLine(e.getLineNumber()); | ... | ... |
utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/SubModuleListener.java
... | @@ -16,10 +16,11 @@ | ... | @@ -16,10 +16,11 @@ |
16 | 16 | ||
17 | package org.onosproject.yangutils.parser.impl.listeners; | 17 | package org.onosproject.yangutils.parser.impl.listeners; |
18 | 18 | ||
19 | -import org.onosproject.yangutils.linker.impl.YangReferenceResolver; | ||
20 | import org.onosproject.yangutils.datamodel.YangRevision; | 19 | import org.onosproject.yangutils.datamodel.YangRevision; |
21 | import org.onosproject.yangutils.datamodel.YangSubModule; | 20 | import org.onosproject.yangutils.datamodel.YangSubModule; |
22 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 21 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; |
22 | +import org.onosproject.yangutils.linker.ResolvableType; | ||
23 | +import org.onosproject.yangutils.linker.YangReferenceResolver; | ||
23 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; | 24 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; |
24 | import org.onosproject.yangutils.parser.exceptions.ParserException; | 25 | import org.onosproject.yangutils.parser.exceptions.ParserException; |
25 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; | 26 | import org.onosproject.yangutils.parser.impl.TreeWalkListener; |
... | @@ -28,7 +29,8 @@ import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_G | ... | @@ -28,7 +29,8 @@ import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_G |
28 | import static org.onosproject.yangutils.datamodel.utils.YangDataModelFactory.getYangSubModuleNode; | 29 | import static org.onosproject.yangutils.datamodel.utils.YangDataModelFactory.getYangSubModuleNode; |
29 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; | 30 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; |
30 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT; | 31 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT; |
31 | -import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage; | 32 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction |
33 | + .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; |
33 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_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; |
... | @@ -121,7 +123,10 @@ public final class SubModuleListener { | ... | @@ -121,7 +123,10 @@ public final class SubModuleListener { |
121 | ctx.identifier().getText(), EXIT)); | 123 | ctx.identifier().getText(), EXIT)); |
122 | } | 124 | } |
123 | try { | 125 | try { |
124 | - ((YangReferenceResolver) listener.getParsedDataStack().peek()).resolveSelfFileLinking(); | 126 | + ((YangReferenceResolver) listener.getParsedDataStack().peek()) |
127 | + .resolveSelfFileLinking(ResolvableType.YANG_USES); | ||
128 | + ((YangReferenceResolver) listener.getParsedDataStack().peek()) | ||
129 | + .resolveSelfFileLinking(ResolvableType.YANG_DERIVED_DATA_TYPE); | ||
125 | } catch (DataModelException e) { | 130 | } catch (DataModelException e) { |
126 | ParserException parserException = new ParserException(e.getMessage()); | 131 | ParserException parserException = new ParserException(e.getMessage()); |
127 | parserException.setLine(e.getLineNumber()); | 132 | parserException.setLine(e.getLineNumber()); | ... | ... |
... | @@ -35,7 +35,7 @@ import org.onosproject.yangutils.parser.impl.TreeWalkListener; | ... | @@ -35,7 +35,7 @@ import org.onosproject.yangutils.parser.impl.TreeWalkListener; |
35 | import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.addResolutionInfo; | 35 | import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.addResolutionInfo; |
36 | import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_GENERATION; | 36 | import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_GENERATION; |
37 | import static org.onosproject.yangutils.datamodel.utils.YangDataModelFactory.getYangType; | 37 | import static org.onosproject.yangutils.datamodel.utils.YangDataModelFactory.getYangType; |
38 | -import static org.onosproject.yangutils.linker.impl.ResolvableStatus.UNRESOLVED; | 38 | +import static org.onosproject.yangutils.linker.ResolvableStatus.UNRESOLVED; |
39 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; | 39 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; |
40 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT; | 40 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT; |
41 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage; | 41 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage; | ... | ... |
... | @@ -247,7 +247,7 @@ public final class AugmentListenerUtil { | ... | @@ -247,7 +247,7 @@ public final class AugmentListenerUtil { |
247 | /** | 247 | /** |
248 | * Validates whether nodes in target node list are valid or not. | 248 | * Validates whether nodes in target node list are valid or not. |
249 | * | 249 | * |
250 | - * @param targetNodeName current target node | 250 | + * @param targetNodes target node |
251 | * @param curNode YANG node | 251 | * @param curNode YANG node |
252 | * @return true or false | 252 | * @return true or false |
253 | */ | 253 | */ | ... | ... |
... | @@ -17,7 +17,7 @@ | ... | @@ -17,7 +17,7 @@ |
17 | package org.onosproject.yangutils.plugin.manager; | 17 | package org.onosproject.yangutils.plugin.manager; |
18 | 18 | ||
19 | import java.util.Objects; | 19 | import java.util.Objects; |
20 | -import org.onosproject.yangutils.linker.impl.ResolvableStatus; | 20 | +import org.onosproject.yangutils.linker.ResolvableStatus; |
21 | import org.onosproject.yangutils.datamodel.YangNode; | 21 | import org.onosproject.yangutils.datamodel.YangNode; |
22 | 22 | ||
23 | /** | 23 | /** | ... | ... |
... | @@ -62,7 +62,8 @@ import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getDirectory; | ... | @@ -62,7 +62,8 @@ import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getDirectory; |
62 | */ | 62 | */ |
63 | @Mojo(name = "yang2java", defaultPhase = GENERATE_SOURCES, requiresDependencyResolution = COMPILE, | 63 | @Mojo(name = "yang2java", defaultPhase = GENERATE_SOURCES, requiresDependencyResolution = COMPILE, |
64 | requiresProject = true) | 64 | requiresProject = true) |
65 | -public class YangUtilManager extends AbstractMojo { | 65 | +public class YangUtilManager |
66 | + extends AbstractMojo { | ||
66 | 67 | ||
67 | private YangNode rootNode; | 68 | private YangNode rootNode; |
68 | // YANG file information set. | 69 | // YANG file information set. |
... | @@ -134,7 +135,8 @@ public class YangUtilManager extends AbstractMojo { | ... | @@ -134,7 +135,8 @@ public class YangUtilManager extends AbstractMojo { |
134 | private BuildContext context; | 135 | private BuildContext context; |
135 | 136 | ||
136 | @Override | 137 | @Override |
137 | - public void execute() throws MojoExecutionException, MojoFailureException { | 138 | + public void execute() |
139 | + throws MojoExecutionException, MojoFailureException { | ||
138 | 140 | ||
139 | try { | 141 | try { |
140 | 142 | ||
... | @@ -204,7 +206,8 @@ public class YangUtilManager extends AbstractMojo { | ... | @@ -204,7 +206,8 @@ public class YangUtilManager extends AbstractMojo { |
204 | * | 206 | * |
205 | * @throws MojoExecutionException a violation in mojo excecution | 207 | * @throws MojoExecutionException a violation in mojo excecution |
206 | */ | 208 | */ |
207 | - public void resolveDependenciesUsingLinker() throws MojoExecutionException { | 209 | + public void resolveDependenciesUsingLinker() |
210 | + throws MojoExecutionException { | ||
208 | for (YangFileInfo yangFileInfo : getYangFileInfoSet()) { | 211 | for (YangFileInfo yangFileInfo : getYangFileInfoSet()) { |
209 | setCurYangFileInfo(yangFileInfo); | 212 | setCurYangFileInfo(yangFileInfo); |
210 | try { | 213 | try { |
... | @@ -220,7 +223,8 @@ public class YangUtilManager extends AbstractMojo { | ... | @@ -220,7 +223,8 @@ public class YangUtilManager extends AbstractMojo { |
220 | * | 223 | * |
221 | * @throws IOException a violation in IO | 224 | * @throws IOException a violation in IO |
222 | */ | 225 | */ |
223 | - public void parseYangFileInfoSet() throws IOException { | 226 | + public void parseYangFileInfoSet() |
227 | + throws IOException { | ||
224 | for (YangFileInfo yangFileInfo : getYangFileInfoSet()) { | 228 | for (YangFileInfo yangFileInfo : getYangFileInfoSet()) { |
225 | setCurYangFileInfo(yangFileInfo); | 229 | setCurYangFileInfo(yangFileInfo); |
226 | try { | 230 | try { | ... | ... |
utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGeneratorUtil.java
... | @@ -77,18 +77,35 @@ public final class JavaCodeGeneratorUtil { | ... | @@ -77,18 +77,35 @@ public final class JavaCodeGeneratorUtil { |
77 | 77 | ||
78 | while (codeGenNode != null) { | 78 | while (codeGenNode != null) { |
79 | if (curTraversal != PARENT) { | 79 | if (curTraversal != PARENT) { |
80 | + if (!(codeGenNode instanceof JavaCodeGenerator)) { | ||
81 | + throw new TranslatorException("Unsupported node to generate code"); | ||
82 | + } | ||
83 | + | ||
80 | setCurNode(codeGenNode); | 84 | setCurNode(codeGenNode); |
85 | + try { | ||
81 | generateCodeEntry(codeGenNode, yangPlugin); | 86 | generateCodeEntry(codeGenNode, yangPlugin); |
87 | + } catch (Exception e) { | ||
88 | + throw new TranslatorException(e.getMessage()); | ||
89 | + } | ||
90 | + | ||
82 | } | 91 | } |
83 | if (curTraversal != PARENT && codeGenNode.getChild() != null) { | 92 | if (curTraversal != PARENT && codeGenNode.getChild() != null) { |
84 | curTraversal = CHILD; | 93 | curTraversal = CHILD; |
85 | codeGenNode = codeGenNode.getChild(); | 94 | codeGenNode = codeGenNode.getChild(); |
86 | } else if (codeGenNode.getNextSibling() != null) { | 95 | } else if (codeGenNode.getNextSibling() != null) { |
96 | + try { | ||
87 | generateCodeExit(codeGenNode); | 97 | generateCodeExit(codeGenNode); |
98 | + } catch (Exception e) { | ||
99 | + throw new TranslatorException(e.getMessage()); | ||
100 | + } | ||
88 | curTraversal = SIBILING; | 101 | curTraversal = SIBILING; |
89 | codeGenNode = codeGenNode.getNextSibling(); | 102 | codeGenNode = codeGenNode.getNextSibling(); |
90 | } else { | 103 | } else { |
104 | + try { | ||
91 | generateCodeExit(codeGenNode); | 105 | generateCodeExit(codeGenNode); |
106 | + } catch (Exception e) { | ||
107 | + throw new TranslatorException(e.getMessage()); | ||
108 | + } | ||
92 | curTraversal = PARENT; | 109 | curTraversal = PARENT; |
93 | codeGenNode = codeGenNode.getParent(); | 110 | codeGenNode = codeGenNode.getParent(); |
94 | } | 111 | } |
... | @@ -123,7 +140,8 @@ public final class JavaCodeGeneratorUtil { | ... | @@ -123,7 +140,8 @@ public final class JavaCodeGeneratorUtil { |
123 | * @throws TranslatorException when fails to generate java code file the current | 140 | * @throws TranslatorException when fails to generate java code file the current |
124 | * node | 141 | * node |
125 | */ | 142 | */ |
126 | - private static void generateCodeExit(YangNode codeGenNode) throws TranslatorException { | 143 | + private static void generateCodeExit(YangNode codeGenNode) |
144 | + throws TranslatorException { | ||
127 | 145 | ||
128 | if (codeGenNode instanceof JavaCodeGenerator) { | 146 | if (codeGenNode instanceof JavaCodeGenerator) { |
129 | ((JavaCodeGenerator) codeGenNode).generateCodeExit(); | 147 | ((JavaCodeGenerator) codeGenNode).generateCodeExit(); | ... | ... |
... | @@ -20,8 +20,6 @@ import java.util.List; | ... | @@ -20,8 +20,6 @@ import java.util.List; |
20 | import java.util.SortedSet; | 20 | import java.util.SortedSet; |
21 | import java.util.TreeSet; | 21 | import java.util.TreeSet; |
22 | 22 | ||
23 | -import static java.util.Collections.sort; | ||
24 | - | ||
25 | import static org.onosproject.yangutils.utils.UtilConstants.ABSTRACT_EVENT; | 23 | import static org.onosproject.yangutils.utils.UtilConstants.ABSTRACT_EVENT; |
26 | import static org.onosproject.yangutils.utils.UtilConstants.ARRAY_LIST; | 24 | import static org.onosproject.yangutils.utils.UtilConstants.ARRAY_LIST; |
27 | import static org.onosproject.yangutils.utils.UtilConstants.AUGMENTATION_HOLDER_CLASS_IMPORT_CLASS; | 25 | import static org.onosproject.yangutils.utils.UtilConstants.AUGMENTATION_HOLDER_CLASS_IMPORT_CLASS; |
... | @@ -45,6 +43,8 @@ import static org.onosproject.yangutils.utils.UtilConstants.PERIOD; | ... | @@ -45,6 +43,8 @@ import static org.onosproject.yangutils.utils.UtilConstants.PERIOD; |
45 | import static org.onosproject.yangutils.utils.UtilConstants.PROVIDED_AUGMENTATION_CLASS_IMPORT_PKG; | 43 | import static org.onosproject.yangutils.utils.UtilConstants.PROVIDED_AUGMENTATION_CLASS_IMPORT_PKG; |
46 | import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN; | 44 | import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN; |
47 | 45 | ||
46 | +import static java.util.Collections.sort; | ||
47 | + | ||
48 | /** | 48 | /** |
49 | * Represents that generated Java file can contain imports. | 49 | * Represents that generated Java file can contain imports. |
50 | */ | 50 | */ |
... | @@ -116,20 +116,52 @@ public class JavaImportData { | ... | @@ -116,20 +116,52 @@ public class JavaImportData { |
116 | * a qualified manner. | 116 | * a qualified manner. |
117 | * | 117 | * |
118 | * @param newImportInfo class/interface info being imported | 118 | * @param newImportInfo class/interface info being imported |
119 | - * @return status of new addition of class/interface to the import set | 119 | + * @param className name of the call being generated |
120 | + * @param classPkg generated class package | ||
121 | + * @return qualified access status of the import node being added | ||
122 | + */ | ||
123 | + public boolean addImportInfo(JavaQualifiedTypeInfo newImportInfo, | ||
124 | + String className, String classPkg) { | ||
125 | + | ||
126 | + if (newImportInfo.getClassInfo().contentEquals(className)) { | ||
127 | + /* | ||
128 | + * if the current class name is same as the attribute class name, | ||
129 | + * then the attribute must be accessed in a qualified manner. | ||
130 | + */ | ||
131 | + return true; | ||
132 | + } else if (newImportInfo.getPkgInfo() == null) { | ||
133 | + /* | ||
134 | + * If the package info is null, then it is not a candidate for import / qualified access | ||
120 | */ | 135 | */ |
121 | - public boolean addImportInfo(JavaQualifiedTypeInfo newImportInfo) { | 136 | + return false; |
137 | + } | ||
138 | + | ||
139 | + /* | ||
140 | + * If the attribute type is having the package info, it is contender | ||
141 | + * for import list and also need to check if it needs to be a | ||
142 | + * qualified access. | ||
143 | + */ | ||
144 | + if (newImportInfo.getPkgInfo().contentEquals(classPkg)) { | ||
145 | + /** | ||
146 | + * Package of the referred attribute and the generated class is same, so no need import | ||
147 | + * or qualified access. | ||
148 | + */ | ||
149 | + return false; | ||
150 | + } | ||
122 | 151 | ||
123 | for (JavaQualifiedTypeInfo curImportInfo : getImportSet()) { | 152 | for (JavaQualifiedTypeInfo curImportInfo : getImportSet()) { |
124 | if (curImportInfo.getClassInfo() | 153 | if (curImportInfo.getClassInfo() |
125 | .contentEquals(newImportInfo.getClassInfo())) { | 154 | .contentEquals(newImportInfo.getClassInfo())) { |
126 | - return curImportInfo.getPkgInfo() | 155 | + return !curImportInfo.getPkgInfo() |
127 | .contentEquals(newImportInfo.getPkgInfo()); | 156 | .contentEquals(newImportInfo.getPkgInfo()); |
128 | } | 157 | } |
129 | } | 158 | } |
130 | 159 | ||
160 | + /* | ||
161 | + * import is added, so it is a member for non qualified access | ||
162 | + */ | ||
131 | getImportSet().add(newImportInfo); | 163 | getImportSet().add(newImportInfo); |
132 | - return true; | 164 | + return false; |
133 | } | 165 | } |
134 | 166 | ||
135 | /** | 167 | /** | ... | ... |
utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/JavaQualifiedTypeInfo.java
... | @@ -149,14 +149,10 @@ public class JavaQualifiedTypeInfo | ... | @@ -149,14 +149,10 @@ public class JavaQualifiedTypeInfo |
149 | throw new TranslatorException("missing java file information to get the package details " | 149 | throw new TranslatorException("missing java file information to get the package details " |
150 | + "of attribute corresponding to child node"); | 150 | + "of attribute corresponding to child node"); |
151 | } | 151 | } |
152 | - /* | 152 | + |
153 | - * The scenario when we need to add the child class as an attribute in | ||
154 | - * the current class. The child class is in the package of the current | ||
155 | - * classes package with current classes name. | ||
156 | - */ | ||
157 | importInfo.setClassInfo(attributeName); | 153 | importInfo.setClassInfo(attributeName); |
158 | - importInfo.setPkgInfo((((JavaFileInfoContainer) curNode).getJavaFileInfo().getPackage() + "." | 154 | + importInfo.setPkgInfo(((JavaFileInfoContainer) curNode) |
159 | - + ((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName()).toLowerCase()); | 155 | + .getJavaFileInfo().getPackage()); |
160 | 156 | ||
161 | return importInfo; | 157 | return importInfo; |
162 | } | 158 | } | ... | ... |
utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaFragmentFiles.java
This diff is collapsed. Click to expand it.
... | @@ -71,11 +71,11 @@ import static org.onosproject.yangutils.utils.UtilConstants.RPC_INPUT_VAR_NAME; | ... | @@ -71,11 +71,11 @@ import static org.onosproject.yangutils.utils.UtilConstants.RPC_INPUT_VAR_NAME; |
71 | import static org.onosproject.yangutils.utils.UtilConstants.SLASH; | 71 | import static org.onosproject.yangutils.utils.UtilConstants.SLASH; |
72 | import static org.onosproject.yangutils.utils.UtilConstants.VOID; | 72 | import static org.onosproject.yangutils.utils.UtilConstants.VOID; |
73 | import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.createPackage; | 73 | import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.createPackage; |
74 | -import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.generateJavaDocForRpc; | ||
75 | -import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc; | ||
76 | import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.ENUM_ATTRIBUTE; | 74 | import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.ENUM_ATTRIBUTE; |
77 | import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD; | 75 | import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD; |
78 | import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.MANAGER_SETTER_METHOD; | 76 | import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.MANAGER_SETTER_METHOD; |
77 | +import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.generateJavaDocForRpc; | ||
78 | +import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc; | ||
79 | import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile; | 79 | import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile; |
80 | 80 | ||
81 | /** | 81 | /** |
... | @@ -119,6 +119,7 @@ public class TempJavaServiceFragmentFiles | ... | @@ -119,6 +119,7 @@ public class TempJavaServiceFragmentFiles |
119 | * File name for event subject setter temp file. | 119 | * File name for event subject setter temp file. |
120 | */ | 120 | */ |
121 | private static final String EVENT_SUBJECT_SETTER_FILE_NAME = "EventSubjectSetter"; | 121 | private static final String EVENT_SUBJECT_SETTER_FILE_NAME = "EventSubjectSetter"; |
122 | + | ||
122 | /** | 123 | /** |
123 | * File name for generated class file for service | 124 | * File name for generated class file for service |
124 | * suffix. | 125 | * suffix. |
... | @@ -376,8 +377,7 @@ public class TempJavaServiceFragmentFiles | ... | @@ -376,8 +377,7 @@ public class TempJavaServiceFragmentFiles |
376 | @Override | 377 | @Override |
377 | public void generateJavaFile(int fileType, YangNode curNode) | 378 | public void generateJavaFile(int fileType, YangNode curNode) |
378 | throws IOException { | 379 | throws IOException { |
379 | - List<String> imports = new ArrayList<>(); | 380 | + List<String> imports = getJavaImportData().getImports(); |
380 | - imports = getJavaImportData().getImports(); | ||
381 | 381 | ||
382 | createPackage(curNode); | 382 | createPackage(curNode); |
383 | 383 | ||
... | @@ -441,7 +441,8 @@ public class TempJavaServiceFragmentFiles | ... | @@ -441,7 +441,8 @@ public class TempJavaServiceFragmentFiles |
441 | */ | 441 | */ |
442 | private void addRpcString(JavaAttributeInfo javaAttributeInfoOfInput, | 442 | private void addRpcString(JavaAttributeInfo javaAttributeInfoOfInput, |
443 | JavaAttributeInfo javaAttributeInfoOfOutput, YangPluginConfig pluginConfig, | 443 | JavaAttributeInfo javaAttributeInfoOfOutput, YangPluginConfig pluginConfig, |
444 | - String rpcName) throws IOException { | 444 | + String rpcName) |
445 | + throws IOException { | ||
445 | String rpcInput = EMPTY_STRING; | 446 | String rpcInput = EMPTY_STRING; |
446 | String rpcOutput = VOID; | 447 | String rpcOutput = VOID; |
447 | String rpcInputJavaDoc = EMPTY_STRING; | 448 | String rpcInputJavaDoc = EMPTY_STRING; |
... | @@ -477,7 +478,8 @@ public class TempJavaServiceFragmentFiles | ... | @@ -477,7 +478,8 @@ public class TempJavaServiceFragmentFiles |
477 | public void addRpcString(JavaAttributeInfo javaAttributeInfoOfInput, | 478 | public void addRpcString(JavaAttributeInfo javaAttributeInfoOfInput, |
478 | JavaAttributeInfo javaAttributeInfoOfOutput, YangPluginConfig pluginConfig, | 479 | JavaAttributeInfo javaAttributeInfoOfOutput, YangPluginConfig pluginConfig, |
479 | String rpcName, boolean isInputLeafHolder, boolean isOutputLeafHolder, | 480 | String rpcName, boolean isInputLeafHolder, boolean isOutputLeafHolder, |
480 | - boolean isInputSingleChildHolder, boolean isOutputSingleChildHolder) throws IOException { | 481 | + boolean isInputSingleChildHolder, boolean isOutputSingleChildHolder) |
482 | + throws IOException { | ||
481 | String rpcInput = EMPTY_STRING; | 483 | String rpcInput = EMPTY_STRING; |
482 | String rpcOutput = VOID; | 484 | String rpcOutput = VOID; |
483 | String rpcInputJavaDoc = EMPTY_STRING; | 485 | String rpcInputJavaDoc = EMPTY_STRING; |
... | @@ -786,13 +788,14 @@ public class TempJavaServiceFragmentFiles | ... | @@ -786,13 +788,14 @@ public class TempJavaServiceFragmentFiles |
786 | * @param pluginConfig plugin configurations | 788 | * @param pluginConfig plugin configurations |
787 | * @throws IOException when fails to do IO operations | 789 | * @throws IOException when fails to do IO operations |
788 | */ | 790 | */ |
789 | - public void addJavaSnippetOfEvent(YangNode curNode, YangPluginConfig pluginConfig) throws IOException { | 791 | + public void addJavaSnippetOfEvent(YangNode curNode, YangPluginConfig pluginConfig) |
792 | + throws IOException { | ||
790 | 793 | ||
791 | String currentInfo = getCapitalCase(getCamelCase(((YangNotification) curNode).getName(), | 794 | String currentInfo = getCapitalCase(getCamelCase(((YangNotification) curNode).getName(), |
792 | pluginConfig.getConflictResolver())); | 795 | pluginConfig.getConflictResolver())); |
793 | String notificationName = ((YangNotification) curNode).getName(); | 796 | String notificationName = ((YangNotification) curNode).getName(); |
794 | 797 | ||
795 | - JavaQualifiedTypeInfo qualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(curNode.getParent(), | 798 | + JavaQualifiedTypeInfo qualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(curNode, |
796 | getCapitalCase(currentInfo)); | 799 | getCapitalCase(currentInfo)); |
797 | 800 | ||
798 | JavaAttributeInfo javaAttributeInfo = | 801 | JavaAttributeInfo javaAttributeInfo = |
... | @@ -807,14 +810,16 @@ public class TempJavaServiceFragmentFiles | ... | @@ -807,14 +810,16 @@ public class TempJavaServiceFragmentFiles |
807 | } | 810 | } |
808 | 811 | ||
809 | /*Adds event to enum temp file.*/ | 812 | /*Adds event to enum temp file.*/ |
810 | - private void addEventEnum(String notificationName, YangPluginConfig pluginConfig) throws IOException { | 813 | + private void addEventEnum(String notificationName, YangPluginConfig pluginConfig) |
814 | + throws IOException { | ||
811 | appendToFile(getEventEnumTempFileHandle(), | 815 | appendToFile(getEventEnumTempFileHandle(), |
812 | getJavaDoc(ENUM_ATTRIBUTE, notificationName, false, pluginConfig) + FOUR_SPACE_INDENTATION | 816 | getJavaDoc(ENUM_ATTRIBUTE, notificationName, false, pluginConfig) + FOUR_SPACE_INDENTATION |
813 | + getEnumJavaAttribute(notificationName).toUpperCase() + COMMA + NEW_LINE); | 817 | + getEnumJavaAttribute(notificationName).toUpperCase() + COMMA + NEW_LINE); |
814 | } | 818 | } |
815 | 819 | ||
816 | /*Adds event method in event class*/ | 820 | /*Adds event method in event class*/ |
817 | - private void addEnumMethod(String eventClassname, String className) throws IOException { | 821 | + private void addEnumMethod(String eventClassname, String className) |
822 | + throws IOException { | ||
818 | appendToFile(getEventMethodTempFileHandle(), getEventFileContents(eventClassname, className)); | 823 | appendToFile(getEventMethodTempFileHandle(), getEventFileContents(eventClassname, className)); |
819 | } | 824 | } |
820 | 825 | ||
... | @@ -853,7 +858,8 @@ public class TempJavaServiceFragmentFiles | ... | @@ -853,7 +858,8 @@ public class TempJavaServiceFragmentFiles |
853 | } | 858 | } |
854 | 859 | ||
855 | /*Adds getter method for event in event subject class.*/ | 860 | /*Adds getter method for event in event subject class.*/ |
856 | - private void addEventSubjectGetter(JavaAttributeInfo attr, YangPluginConfig pluginConfig) throws IOException { | 861 | + private void addEventSubjectGetter(JavaAttributeInfo attr, YangPluginConfig pluginConfig) |
862 | + throws IOException { | ||
857 | appendToFile(getEventSubjectGetterTempFileHandle(), | 863 | appendToFile(getEventSubjectGetterTempFileHandle(), |
858 | getJavaDoc(GETTER_METHOD, getCapitalCase(attr.getAttributeName()), false, pluginConfig) | 864 | getJavaDoc(GETTER_METHOD, getCapitalCase(attr.getAttributeName()), false, pluginConfig) |
859 | + getGetterForClass(attr, GENERATE_EVENT_SUBJECT_CLASS) + NEW_LINE); | 865 | + getGetterForClass(attr, GENERATE_EVENT_SUBJECT_CLASS) + NEW_LINE); | ... | ... |
... | @@ -76,6 +76,7 @@ public class TempJavaTypeFragmentFiles | ... | @@ -76,6 +76,7 @@ public class TempJavaTypeFragmentFiles |
76 | * Temporary file handle for of string method of class. | 76 | * Temporary file handle for of string method of class. |
77 | */ | 77 | */ |
78 | private File ofStringImplTempFileHandle; | 78 | private File ofStringImplTempFileHandle; |
79 | + | ||
79 | /** | 80 | /** |
80 | * Temporary file handle for constructor for type class. | 81 | * Temporary file handle for constructor for type class. |
81 | */ | 82 | */ |
... | @@ -85,6 +86,7 @@ public class TempJavaTypeFragmentFiles | ... | @@ -85,6 +86,7 @@ public class TempJavaTypeFragmentFiles |
85 | * Java file handle for typedef class file. | 86 | * Java file handle for typedef class file. |
86 | */ | 87 | */ |
87 | private File typedefClassJavaFileHandle; | 88 | private File typedefClassJavaFileHandle; |
89 | + | ||
88 | /** | 90 | /** |
89 | * Java file handle for type class like union, typedef file. | 91 | * Java file handle for type class like union, typedef file. |
90 | */ | 92 | */ | ... | ... |
... | @@ -24,14 +24,14 @@ import org.onosproject.yangutils.translator.tojava.JavaFileInfo; | ... | @@ -24,14 +24,14 @@ import org.onosproject.yangutils.translator.tojava.JavaFileInfo; |
24 | import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles; | 24 | import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles; |
25 | import org.onosproject.yangutils.translator.tojava.utils.YangPluginConfig; | 25 | import org.onosproject.yangutils.translator.tojava.utils.YangPluginConfig; |
26 | 26 | ||
27 | -import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER; | 27 | +import static org.onosproject.yangutils.translator.tojava.utils.YangJavaModelUtils.updatePackageInfo; |
28 | -import static org.onosproject.yangutils.translator.tojava.utils.YangJavaModelUtils.generateCodeOfNode; | ||
29 | 28 | ||
30 | /** | 29 | /** |
31 | * Represents grouping information extended to support java code generation. | 30 | * Represents grouping information extended to support java code generation. |
32 | */ | 31 | */ |
33 | public class YangJavaGrouping | 32 | public class YangJavaGrouping |
34 | - extends YangGrouping implements JavaCodeGeneratorInfo, JavaCodeGenerator { | 33 | + extends YangGrouping |
34 | + implements JavaCodeGeneratorInfo, JavaCodeGenerator { | ||
35 | 35 | ||
36 | /** | 36 | /** |
37 | * Contains the information of the java file being generated. | 37 | * Contains the information of the java file being generated. |
... | @@ -50,7 +50,6 @@ public class YangJavaGrouping | ... | @@ -50,7 +50,6 @@ public class YangJavaGrouping |
50 | public YangJavaGrouping() { | 50 | public YangJavaGrouping() { |
51 | super(); | 51 | super(); |
52 | setJavaFileInfo(new JavaFileInfo()); | 52 | setJavaFileInfo(new JavaFileInfo()); |
53 | - getJavaFileInfo().setGeneratedFileTypes(GENERATE_INTERFACE_WITH_BUILDER); | ||
54 | } | 53 | } |
55 | 54 | ||
56 | /** | 55 | /** |
... | @@ -96,35 +95,22 @@ public class YangJavaGrouping | ... | @@ -96,35 +95,22 @@ public class YangJavaGrouping |
96 | tempFileHandle = fileHandle; | 95 | tempFileHandle = fileHandle; |
97 | } | 96 | } |
98 | 97 | ||
99 | - /** | 98 | + |
100 | - * Prepare the information for java code generation corresponding to YANG | ||
101 | - * grouping info. | ||
102 | - * | ||
103 | - * @param yangPlugin YANG plugin config | ||
104 | - * @throws TranslatorException translator operation fail | ||
105 | - */ | ||
106 | @Override | 99 | @Override |
107 | - public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException { | 100 | + public void generateCodeEntry(YangPluginConfig yangPlugin) |
101 | + throws TranslatorException { | ||
108 | try { | 102 | try { |
109 | - generateCodeOfNode(this, yangPlugin); | 103 | + updatePackageInfo(this, yangPlugin); |
110 | } catch (IOException e) { | 104 | } catch (IOException e) { |
111 | - throw new TranslatorException( | 105 | + throw new TranslatorException(e.getCause()); |
112 | - "Failed to prepare generate code entry for container node " + this.getName()); | ||
113 | } | 106 | } |
114 | } | 107 | } |
115 | 108 | ||
116 | - /** | ||
117 | - * Create a java file using the YANG grouping info. | ||
118 | - * | ||
119 | - * @throws TranslatorException translator operation fail | ||
120 | - */ | ||
121 | @Override | 109 | @Override |
122 | - public void generateCodeExit() throws TranslatorException { | 110 | + public void generateCodeExit() |
123 | - try { | 111 | + throws TranslatorException { |
124 | - getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_INTERFACE_WITH_BUILDER, this); | 112 | + /* |
125 | - } catch (IOException e) { | 113 | + * Do nothing. |
126 | - throw new TranslatorException("Failed to generate code for container node " + this.getName()); | 114 | + */ |
127 | - } | ||
128 | } | 115 | } |
129 | - | ||
130 | } | 116 | } | ... | ... |
utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaRpc.java
This diff is collapsed. Click to expand it.
... | @@ -16,7 +16,12 @@ | ... | @@ -16,7 +16,12 @@ |
16 | package org.onosproject.yangutils.translator.tojava.javamodel; | 16 | package org.onosproject.yangutils.translator.tojava.javamodel; |
17 | 17 | ||
18 | import java.io.IOException; | 18 | import java.io.IOException; |
19 | +import java.util.List; | ||
19 | 20 | ||
21 | +import org.onosproject.yangutils.datamodel.YangGrouping; | ||
22 | +import org.onosproject.yangutils.datamodel.YangLeaf; | ||
23 | +import org.onosproject.yangutils.datamodel.YangLeafList; | ||
24 | +import org.onosproject.yangutils.datamodel.YangNode; | ||
20 | import org.onosproject.yangutils.datamodel.YangUses; | 25 | import org.onosproject.yangutils.datamodel.YangUses; |
21 | import org.onosproject.yangutils.translator.exception.TranslatorException; | 26 | import org.onosproject.yangutils.translator.exception.TranslatorException; |
22 | import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator; | 27 | import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator; |
... | @@ -24,15 +29,16 @@ import org.onosproject.yangutils.translator.tojava.JavaFileInfo; | ... | @@ -24,15 +29,16 @@ import org.onosproject.yangutils.translator.tojava.JavaFileInfo; |
24 | import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles; | 29 | import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles; |
25 | import org.onosproject.yangutils.translator.tojava.utils.YangPluginConfig; | 30 | import org.onosproject.yangutils.translator.tojava.utils.YangPluginConfig; |
26 | 31 | ||
27 | -import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER; | 32 | +import static org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles.addCurNodeAsAttributeInTargetTempFile; |
28 | -import static org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles.addCurNodeInfoInParentTempFile; | 33 | +import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getParentNodeInGenCode; |
34 | +import static org.onosproject.yangutils.translator.tojava.utils.YangJavaModelUtils.updatePackageInfo; | ||
29 | 35 | ||
30 | /** | 36 | /** |
31 | * Represents uses information extended to support java code generation. | 37 | * Represents uses information extended to support java code generation. |
32 | */ | 38 | */ |
33 | public class YangJavaUses | 39 | public class YangJavaUses |
34 | - extends YangUses implements JavaCodeGeneratorInfo, JavaCodeGenerator { | 40 | + extends YangUses |
35 | - | 41 | + implements JavaCodeGeneratorInfo, JavaCodeGenerator { |
36 | 42 | ||
37 | /** | 43 | /** |
38 | * Contains the information of the java file being generated. | 44 | * Contains the information of the java file being generated. |
... | @@ -51,7 +57,6 @@ public class YangJavaUses | ... | @@ -51,7 +57,6 @@ public class YangJavaUses |
51 | public YangJavaUses() { | 57 | public YangJavaUses() { |
52 | super(); | 58 | super(); |
53 | setJavaFileInfo(new JavaFileInfo()); | 59 | setJavaFileInfo(new JavaFileInfo()); |
54 | - getJavaFileInfo().setGeneratedFileTypes(GENERATE_INTERFACE_WITH_BUILDER); | ||
55 | } | 60 | } |
56 | 61 | ||
57 | /** | 62 | /** |
... | @@ -97,31 +102,57 @@ public class YangJavaUses | ... | @@ -97,31 +102,57 @@ public class YangJavaUses |
97 | tempFileHandle = fileHandle; | 102 | tempFileHandle = fileHandle; |
98 | } | 103 | } |
99 | 104 | ||
100 | - /** | 105 | + |
101 | - * Prepare the information for java code generation corresponding to YANG | ||
102 | - * uses info. | ||
103 | - * | ||
104 | - * @param yangPlugin YANG plugin config | ||
105 | - * @throws TranslatorException translator operation fail | ||
106 | - */ | ||
107 | @Override | 106 | @Override |
108 | - public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException { | 107 | + public void generateCodeEntry(YangPluginConfig yangPlugin) |
108 | + throws TranslatorException { | ||
109 | try { | 109 | try { |
110 | - addCurNodeInfoInParentTempFile(this, false, yangPlugin); | 110 | + updatePackageInfo(this, yangPlugin); |
111 | + | ||
112 | + if (!(getParentNodeInGenCode(this) instanceof JavaCodeGeneratorInfo)) { | ||
113 | + throw new TranslatorException("invalid container of uses"); | ||
114 | + } | ||
115 | + JavaCodeGeneratorInfo javaCodeGeneratorInfo = (JavaCodeGeneratorInfo) getParentNodeInGenCode(this); | ||
116 | + | ||
117 | + if (javaCodeGeneratorInfo instanceof YangGrouping) { | ||
118 | + /* | ||
119 | + * Do nothing, since it will taken care in the groupings uses. | ||
120 | + */ | ||
121 | + return; | ||
122 | + } | ||
123 | + | ||
124 | + for (List<YangLeaf> leavesList : | ||
125 | + getUsesResolvedLeavesList()) { | ||
126 | + //add the resolved leaves to the parent as an attribute | ||
127 | + javaCodeGeneratorInfo.getTempJavaCodeFragmentFiles() | ||
128 | + .getBeanTempFiles().addLeavesInfoToTempFiles(leavesList, yangPlugin); | ||
129 | + } | ||
130 | + | ||
131 | + for (List<YangLeafList> listOfLeafLists : | ||
132 | + getUsesResolvedListOfLeafList()) { | ||
133 | + //add the resolved leaf-list to the parent as an attribute | ||
134 | + javaCodeGeneratorInfo.getTempJavaCodeFragmentFiles() | ||
135 | + .getBeanTempFiles().addLeafListInfoToTempFiles(listOfLeafLists, yangPlugin); | ||
136 | + } | ||
137 | + | ||
138 | + for (YangNode usesResolvedNode : | ||
139 | + getUsesResolvedNodeList()) { | ||
140 | + //add the resolved nodes to the parent as an attribute | ||
141 | + addCurNodeAsAttributeInTargetTempFile(usesResolvedNode, yangPlugin, | ||
142 | + getParentNodeInGenCode(this)); | ||
143 | + } | ||
144 | + | ||
111 | } catch (IOException e) { | 145 | } catch (IOException e) { |
112 | - throw new TranslatorException( | 146 | + throw new TranslatorException(e.getCause()); |
113 | - "Failed to prepare generate code entry for container node " + this.getName()); | ||
114 | } | 147 | } |
115 | } | 148 | } |
116 | 149 | ||
117 | - /** | 150 | + |
118 | - * Create a java file using the YANG uses info. | ||
119 | - * | ||
120 | - * @throws TranslatorException translator operation fail | ||
121 | - */ | ||
122 | @Override | 151 | @Override |
123 | - public void generateCodeExit() throws TranslatorException { | 152 | + public void generateCodeExit() |
124 | - // no code generation will be done for uses. | 153 | + throws TranslatorException { |
154 | + /* | ||
155 | + * Do nothing. | ||
156 | + */ | ||
125 | } | 157 | } |
126 | - | ||
127 | } | 158 | } | ... | ... |
... | @@ -16,6 +16,8 @@ | ... | @@ -16,6 +16,8 @@ |
16 | 16 | ||
17 | package org.onosproject.yangutils.translator.tojava.utils; | 17 | package org.onosproject.yangutils.translator.tojava.utils; |
18 | 18 | ||
19 | +import java.util.Stack; | ||
20 | + | ||
19 | import org.onosproject.yangutils.datamodel.YangDataTypes; | 21 | import org.onosproject.yangutils.datamodel.YangDataTypes; |
20 | import org.onosproject.yangutils.datamodel.YangDerivedInfo; | 22 | import org.onosproject.yangutils.datamodel.YangDerivedInfo; |
21 | import org.onosproject.yangutils.datamodel.YangEnumeration; | 23 | import org.onosproject.yangutils.datamodel.YangEnumeration; |
... | @@ -26,6 +28,7 @@ import org.onosproject.yangutils.datamodel.YangUnion; | ... | @@ -26,6 +28,7 @@ import org.onosproject.yangutils.datamodel.YangUnion; |
26 | import org.onosproject.yangutils.translator.exception.TranslatorException; | 28 | import org.onosproject.yangutils.translator.exception.TranslatorException; |
27 | import org.onosproject.yangutils.translator.tojava.JavaFileInfo; | 29 | import org.onosproject.yangutils.translator.tojava.JavaFileInfo; |
28 | import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer; | 30 | import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer; |
31 | +import org.onosproject.yangutils.translator.tojava.javamodel.JavaCodeGeneratorInfo; | ||
29 | import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaEnumeration; | 32 | import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaEnumeration; |
30 | import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModule; | 33 | import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModule; |
31 | import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaSubModule; | 34 | import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaSubModule; |
... | @@ -34,6 +37,8 @@ import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaUnion; | ... | @@ -34,6 +37,8 @@ import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaUnion; |
34 | 37 | ||
35 | import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCamelCase; | 38 | import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCamelCase; |
36 | import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCapitalCase; | 39 | import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCapitalCase; |
40 | +import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCurNodePackage; | ||
41 | +import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getPackageDirPathFromJavaJPackage; | ||
37 | import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getRootPackage; | 42 | import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getRootPackage; |
38 | import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER; | 43 | import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER; |
39 | import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE; | 44 | import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE; |
... | @@ -419,25 +424,83 @@ public final class AttributesJavaDataType { | ... | @@ -419,25 +424,83 @@ public final class AttributesJavaDataType { |
419 | * @param conflictResolver object of YANG to java naming conflict util | 424 | * @param conflictResolver object of YANG to java naming conflict util |
420 | * @return java package from parent node | 425 | * @return java package from parent node |
421 | */ | 426 | */ |
422 | - private static String getPackageFromParent(YangNode parent, YangToJavaNamingConflictUtil conflictResolver) { | 427 | + private static String getPackageFromParent(YangNode parent, |
428 | + YangToJavaNamingConflictUtil conflictResolver) { | ||
423 | if (!(parent instanceof JavaFileInfoContainer)) { | 429 | if (!(parent instanceof JavaFileInfoContainer)) { |
424 | throw new TranslatorException("invalid child node is being processed."); | 430 | throw new TranslatorException("invalid child node is being processed."); |
425 | } | 431 | } |
426 | JavaFileInfo parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo(); | 432 | JavaFileInfo parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo(); |
427 | if (parentInfo.getPackage() == null) { | 433 | if (parentInfo.getPackage() == null) { |
428 | - if (parent instanceof YangJavaModule) { | 434 | + updateJavaFileInfo(parent, conflictResolver); |
429 | - YangJavaModule module = (YangJavaModule) parent; | 435 | + } |
430 | - String modulePkg = getRootPackage(module.getVersion(), module.getNameSpace().getUri(), module | 436 | + return parentInfo.getPackage() + PERIOD + parentInfo.getJavaName().toLowerCase(); |
437 | + } | ||
438 | + | ||
439 | + /** | ||
440 | + * Update the referred data model nodes java file info, this will be called, | ||
441 | + * when the linked node is yet to translate. Then resolve until the parent hierarchy. | ||
442 | + * | ||
443 | + * @param yangNode node whose java info needs to be updated | ||
444 | + * @param conflictResolver yang plugin config | ||
445 | + */ | ||
446 | + public static void updateJavaFileInfo(YangNode yangNode, | ||
447 | + YangToJavaNamingConflictUtil conflictResolver) { | ||
448 | + Stack<YangNode> nodesToUpdatePackage = new Stack<YangNode>(); | ||
449 | + | ||
450 | + /* | ||
451 | + * Add the nodes to be updated for package info in a stack. | ||
452 | + */ | ||
453 | + while (yangNode != null | ||
454 | + && ((JavaFileInfoContainer) yangNode) | ||
455 | + .getJavaFileInfo().getPackage() == null) { | ||
456 | + nodesToUpdatePackage.push(yangNode); | ||
457 | + yangNode = yangNode.getParent(); | ||
458 | + } | ||
459 | + | ||
460 | + /* | ||
461 | + * If the package is not updated till root node, then root package needs to | ||
462 | + * be updated. | ||
463 | + */ | ||
464 | + if (yangNode == null) { | ||
465 | + yangNode = nodesToUpdatePackage.pop(); | ||
466 | + String pkg; | ||
467 | + if (yangNode instanceof YangJavaModule) { | ||
468 | + YangJavaModule module = (YangJavaModule) yangNode; | ||
469 | + pkg = getRootPackage(module.getVersion(), module.getNameSpace().getUri(), module | ||
431 | .getRevision().getRevDate(), conflictResolver); | 470 | .getRevision().getRevDate(), conflictResolver); |
432 | - return modulePkg + PERIOD + getCamelCase(module.getName(), conflictResolver).toLowerCase(); | 471 | + } else if (yangNode instanceof YangJavaSubModule) { |
433 | - } else if (parent instanceof YangJavaSubModule) { | 472 | + YangJavaSubModule submodule = (YangJavaSubModule) yangNode; |
434 | - YangJavaSubModule submodule = (YangJavaSubModule) parent; | 473 | + pkg = getRootPackage(submodule.getVersion(), |
435 | - String subModulePkg = getRootPackage(submodule.getVersion(), | ||
436 | submodule.getNameSpaceFromModule(submodule.getBelongsTo()), | 474 | submodule.getNameSpaceFromModule(submodule.getBelongsTo()), |
437 | submodule.getRevision().getRevDate(), conflictResolver); | 475 | submodule.getRevision().getRevDate(), conflictResolver); |
438 | - return subModulePkg + PERIOD + getCamelCase(submodule.getName(), conflictResolver).toLowerCase(); | 476 | + } else { |
477 | + throw new TranslatorException("Invalid root node of data model tree"); | ||
439 | } | 478 | } |
479 | + | ||
480 | + ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo() | ||
481 | + .setJavaName(getCamelCase(yangNode.getName(), conflictResolver)); | ||
482 | + ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo() | ||
483 | + .setPackage(pkg); | ||
484 | + ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo() | ||
485 | + .setPackageFilePath(getPackageDirPathFromJavaJPackage( | ||
486 | + ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo() | ||
487 | + .getPackage())); | ||
488 | + } | ||
489 | + | ||
490 | + /** | ||
491 | + * Parent of the node in stack is updated with java info, | ||
492 | + * all the nodes can be popped and updated | ||
493 | + */ | ||
494 | + while (nodesToUpdatePackage.size() != 0) { | ||
495 | + yangNode = nodesToUpdatePackage.pop(); | ||
496 | + ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo() | ||
497 | + .setJavaName(getCamelCase(yangNode.getName(), conflictResolver)); | ||
498 | + ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo() | ||
499 | + .setPackage(getCurNodePackage(yangNode)); | ||
500 | + ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo() | ||
501 | + .setPackageFilePath(getPackageDirPathFromJavaJPackage( | ||
502 | + ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo() | ||
503 | + .getPackage())); | ||
440 | } | 504 | } |
441 | - return parentInfo.getPackage() + PERIOD + parentInfo.getJavaName().toLowerCase(); | ||
442 | } | 505 | } |
443 | } | 506 | } | ... | ... |
... | @@ -27,6 +27,7 @@ import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer; | ... | @@ -27,6 +27,7 @@ import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer; |
27 | import org.onosproject.yangutils.translator.tojava.JavaImportData; | 27 | import org.onosproject.yangutils.translator.tojava.JavaImportData; |
28 | import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfo; | 28 | import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfo; |
29 | 29 | ||
30 | +import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCapitalCase; | ||
30 | import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils.getTempJavaFragement; | 31 | import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils.getTempJavaFragement; |
31 | 32 | ||
32 | /** | 33 | /** |
... | @@ -58,7 +59,7 @@ public class JavaExtendsListHolder { | ... | @@ -58,7 +59,7 @@ public class JavaExtendsListHolder { |
58 | /** | 59 | /** |
59 | * Sets extends list. | 60 | * Sets extends list. |
60 | * | 61 | * |
61 | - * @param extendsList list of classes need to be extended | 62 | + * @param extendedClass map of classes need to be extended |
62 | */ | 63 | */ |
63 | private void setExtendedClassStore(Map<JavaQualifiedTypeInfo, Boolean> extendedClass) { | 64 | private void setExtendedClassStore(Map<JavaQualifiedTypeInfo, Boolean> extendedClass) { |
64 | this.extendedClassStore = extendedClass; | 65 | this.extendedClassStore = extendedClass; |
... | @@ -73,14 +74,13 @@ public class JavaExtendsListHolder { | ... | @@ -73,14 +74,13 @@ public class JavaExtendsListHolder { |
73 | public void addToExtendsList(JavaQualifiedTypeInfo info, YangNode node) { | 74 | public void addToExtendsList(JavaQualifiedTypeInfo info, YangNode node) { |
74 | JavaFileInfo fileInfo = ((JavaFileInfoContainer) node).getJavaFileInfo(); | 75 | JavaFileInfo fileInfo = ((JavaFileInfoContainer) node).getJavaFileInfo(); |
75 | 76 | ||
76 | - if (!fileInfo.getPackage().equals(info.getPkgInfo())) { | ||
77 | JavaImportData importData = getTempJavaFragement(node).getJavaImportData(); | 77 | JavaImportData importData = getTempJavaFragement(node).getJavaImportData(); |
78 | - importData.addImportInfo(info); | 78 | + boolean qualified = importData.addImportInfo(info, |
79 | + getCapitalCase(fileInfo.getJavaName()), fileInfo.getPackage()); | ||
79 | 80 | ||
80 | /*true means import should be added*/ | 81 | /*true means import should be added*/ |
81 | - getExtendedClassStore().put(info, true); | 82 | + getExtendedClassStore().put(info, qualified); |
82 | - } | 83 | + |
83 | - getExtendedClassStore().put(info, false); | ||
84 | addToExtendsList(info); | 84 | addToExtendsList(info); |
85 | } | 85 | } |
86 | 86 | ... | ... |
... | @@ -83,7 +83,6 @@ import static org.onosproject.yangutils.utils.UtilConstants.SERVICE_ANNOTATION; | ... | @@ -83,7 +83,6 @@ import static org.onosproject.yangutils.utils.UtilConstants.SERVICE_ANNOTATION; |
83 | import static org.onosproject.yangutils.utils.UtilConstants.SLASH; | 83 | import static org.onosproject.yangutils.utils.UtilConstants.SLASH; |
84 | import static org.onosproject.yangutils.utils.UtilConstants.SPACE; | 84 | import static org.onosproject.yangutils.utils.UtilConstants.SPACE; |
85 | import static org.onosproject.yangutils.utils.UtilConstants.TRUE; | 85 | import static org.onosproject.yangutils.utils.UtilConstants.TRUE; |
86 | -import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc; | ||
87 | import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_CLASS; | 86 | import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_CLASS; |
88 | import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_INTERFACE; | 87 | import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_INTERFACE; |
89 | import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.ENUM_CLASS; | 88 | import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.ENUM_CLASS; |
... | @@ -94,6 +93,7 @@ import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.IMP | ... | @@ -94,6 +93,7 @@ import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.IMP |
94 | import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.INTERFACE; | 93 | import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.INTERFACE; |
95 | import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.RPC_INTERFACE; | 94 | import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.RPC_INTERFACE; |
96 | import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.RPC_MANAGER; | 95 | import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.RPC_MANAGER; |
96 | +import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc; | ||
97 | import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile; | 97 | import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile; |
98 | import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.parsePkg; | 98 | import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.parsePkg; |
99 | 99 | ||
... | @@ -111,8 +111,8 @@ public final class JavaFileGeneratorUtils { | ... | @@ -111,8 +111,8 @@ public final class JavaFileGeneratorUtils { |
111 | /** | 111 | /** |
112 | * Returns a file object for generated file. | 112 | * Returns a file object for generated file. |
113 | * | 113 | * |
114 | - * @param filePath file package path | ||
115 | * @param fileName file name | 114 | * @param fileName file name |
115 | + * @param filePath file package path | ||
116 | * @param extension file extension | 116 | * @param extension file extension |
117 | * @param handle cached file handle | 117 | * @param handle cached file handle |
118 | * @return file object | 118 | * @return file object |
... | @@ -284,9 +284,14 @@ public final class JavaFileGeneratorUtils { | ... | @@ -284,9 +284,14 @@ public final class JavaFileGeneratorUtils { |
284 | * @throws IOException when fails to generate a file | 284 | * @throws IOException when fails to generate a file |
285 | */ | 285 | */ |
286 | public static void initiateJavaFileGeneration(File file, int genType, List<String> imports, | 286 | public static void initiateJavaFileGeneration(File file, int genType, List<String> imports, |
287 | - YangNode curNode, String className) throws IOException { | 287 | + YangNode curNode, String className) |
288 | + throws IOException { | ||
288 | 289 | ||
289 | try { | 290 | try { |
291 | + if (file.exists()) { | ||
292 | + throw new IOException(file.getName() + " is reused due to YANG naming"); | ||
293 | + } | ||
294 | + | ||
290 | file.createNewFile(); | 295 | file.createNewFile(); |
291 | appendContents(file, genType, imports, curNode, className); | 296 | appendContents(file, genType, imports, curNode, className); |
292 | } catch (IOException e) { | 297 | } catch (IOException e) { |
... | @@ -305,7 +310,8 @@ public final class JavaFileGeneratorUtils { | ... | @@ -305,7 +310,8 @@ public final class JavaFileGeneratorUtils { |
305 | * @throws IOException | 310 | * @throws IOException |
306 | */ | 311 | */ |
307 | private static void appendContents(File file, int genType, List<String> importsList, YangNode curNode, | 312 | private static void appendContents(File file, int genType, List<String> importsList, YangNode curNode, |
308 | - String className) throws IOException { | 313 | + String className) |
314 | + throws IOException { | ||
309 | 315 | ||
310 | JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo(); | 316 | JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo(); |
311 | 317 | ... | ... |
... | @@ -29,12 +29,7 @@ import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles; | ... | @@ -29,12 +29,7 @@ import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles; |
29 | import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer; | 29 | import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer; |
30 | import org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles; | 30 | import org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles; |
31 | import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaAugment; | 31 | import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaAugment; |
32 | -import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaInput; | ||
33 | import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModule; | 32 | import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModule; |
34 | -import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaOutput; | ||
35 | -import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaSubModule; | ||
36 | - | ||
37 | -import static java.util.Collections.sort; | ||
38 | 33 | ||
39 | import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCapitalCase; | 34 | import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCapitalCase; |
40 | import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getSmallCase; | 35 | import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getSmallCase; |
... | @@ -69,6 +64,8 @@ import static org.onosproject.yangutils.utils.UtilConstants.THIS; | ... | @@ -69,6 +64,8 @@ import static org.onosproject.yangutils.utils.UtilConstants.THIS; |
69 | import static org.onosproject.yangutils.utils.UtilConstants.TYPE; | 64 | import static org.onosproject.yangutils.utils.UtilConstants.TYPE; |
70 | import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.updateFileHandle; | 65 | import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.updateFileHandle; |
71 | 66 | ||
67 | +import static java.util.Collections.sort; | ||
68 | + | ||
72 | /** | 69 | /** |
73 | * Represents utilities for temporary java code fragments. | 70 | * Represents utilities for temporary java code fragments. |
74 | */ | 71 | */ |
... | @@ -330,33 +327,6 @@ public final class TempJavaCodeFragmentFilesUtils { | ... | @@ -330,33 +327,6 @@ public final class TempJavaCodeFragmentFilesUtils { |
330 | } | 327 | } |
331 | 328 | ||
332 | /** | 329 | /** |
333 | - * Detects collision between parent and child node which have same name. | ||
334 | - * When parent and child node both have the same name in that case child node should be used with | ||
335 | - * qualified name. | ||
336 | - * | ||
337 | - * @param curNode current YANG node | ||
338 | - * @param qualifiedTypeInfo current node's qualified info | ||
339 | - * @return true if collision is detected | ||
340 | - */ | ||
341 | - public static boolean detectCollisionBwParentAndChildForImport(YangNode curNode, | ||
342 | - JavaQualifiedTypeInfo qualifiedTypeInfo) { | ||
343 | - | ||
344 | - YangNode parent = curNode.getParent(); | ||
345 | - if (parent instanceof YangJavaModule | ||
346 | - || parent instanceof YangJavaSubModule | ||
347 | - || parent instanceof YangJavaInput | ||
348 | - || parent instanceof YangJavaOutput) { | ||
349 | - return false; | ||
350 | - } | ||
351 | - String parentsClassInfo = getCapitalCase(((JavaFileInfoContainer) parent).getJavaFileInfo().getJavaName()); | ||
352 | - String childsClassInfo = qualifiedTypeInfo.getClassInfo(); | ||
353 | - if (childsClassInfo.equals(parentsClassInfo)) { | ||
354 | - return true; | ||
355 | - } | ||
356 | - return false; | ||
357 | - } | ||
358 | - | ||
359 | - /** | ||
360 | * Returns sorted import list. | 330 | * Returns sorted import list. |
361 | * | 331 | * |
362 | * @param imports import list | 332 | * @param imports import list | ... | ... |
... | @@ -19,8 +19,6 @@ package org.onosproject.yangutils.translator.tojava.utils; | ... | @@ -19,8 +19,6 @@ package org.onosproject.yangutils.translator.tojava.utils; |
19 | import java.io.IOException; | 19 | import java.io.IOException; |
20 | 20 | ||
21 | import org.onosproject.yangutils.datamodel.RpcNotificationContainer; | 21 | import org.onosproject.yangutils.datamodel.RpcNotificationContainer; |
22 | -import org.onosproject.yangutils.datamodel.YangAugment; | ||
23 | -import org.onosproject.yangutils.datamodel.YangAugmentationHolder; | ||
24 | import org.onosproject.yangutils.datamodel.YangCase; | 22 | import org.onosproject.yangutils.datamodel.YangCase; |
25 | import org.onosproject.yangutils.datamodel.YangChoice; | 23 | import org.onosproject.yangutils.datamodel.YangChoice; |
26 | import org.onosproject.yangutils.datamodel.YangLeavesHolder; | 24 | import org.onosproject.yangutils.datamodel.YangLeavesHolder; |
... | @@ -45,9 +43,6 @@ import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSy | ... | @@ -45,9 +43,6 @@ import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSy |
45 | import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCapitalCase; | 43 | import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCapitalCase; |
46 | import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCurNodePackage; | 44 | import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCurNodePackage; |
47 | import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getPackageDirPathFromJavaJPackage; | 45 | import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getPackageDirPathFromJavaJPackage; |
48 | -import static org.onosproject.yangutils.utils.UtilConstants.AUGMENTATION_HOLDER; | ||
49 | -import static org.onosproject.yangutils.utils.UtilConstants.AUGMENTED_INFO; | ||
50 | -import static org.onosproject.yangutils.utils.UtilConstants.PROVIDED_AUGMENTATION_CLASS_IMPORT_PKG; | ||
51 | 46 | ||
52 | /** | 47 | /** |
53 | * Represents utility class for YANG java model. | 48 | * Represents utility class for YANG java model. |
... | @@ -198,7 +193,8 @@ public final class YangJavaModelUtils { | ... | @@ -198,7 +193,8 @@ public final class YangJavaModelUtils { |
198 | * @throws IOException when fails to do IO operations | 193 | * @throws IOException when fails to do IO operations |
199 | */ | 194 | */ |
200 | private static void updateNotificaitonNodeInfo(JavaCodeGeneratorInfo javaCodeGeneratorInfo, | 195 | private static void updateNotificaitonNodeInfo(JavaCodeGeneratorInfo javaCodeGeneratorInfo, |
201 | - YangPluginConfig yangPluginConfig) throws IOException { | 196 | + YangPluginConfig yangPluginConfig) |
197 | + throws IOException { | ||
202 | if ((YangNode) javaCodeGeneratorInfo instanceof YangJavaModule) { | 198 | if ((YangNode) javaCodeGeneratorInfo instanceof YangJavaModule) { |
203 | for (YangNode notificaiton : ((YangJavaModule) javaCodeGeneratorInfo).getNotificationNodes()) { | 199 | for (YangNode notificaiton : ((YangJavaModule) javaCodeGeneratorInfo).getNotificationNodes()) { |
204 | javaCodeGeneratorInfo.getTempJavaCodeFragmentFiles() | 200 | javaCodeGeneratorInfo.getTempJavaCodeFragmentFiles() |
... | @@ -259,8 +255,9 @@ public final class YangJavaModelUtils { | ... | @@ -259,8 +255,9 @@ public final class YangJavaModelUtils { |
259 | generateCodeOfNode(javaCodeGeneratorInfo, yangPlugin); | 255 | generateCodeOfNode(javaCodeGeneratorInfo, yangPlugin); |
260 | 256 | ||
261 | /* | 257 | /* |
258 | + TODO: Need to use this, when augmentation is added in YMS | ||
262 | * For augmentation of nodes. | 259 | * For augmentation of nodes. |
263 | - */ | 260 | + |
264 | if (javaCodeGeneratorInfo instanceof YangAugmentationHolder) { | 261 | if (javaCodeGeneratorInfo instanceof YangAugmentationHolder) { |
265 | JavaQualifiedTypeInfo augmentationHoldersInfo = new JavaQualifiedTypeInfo(); | 262 | JavaQualifiedTypeInfo augmentationHoldersInfo = new JavaQualifiedTypeInfo(); |
266 | augmentationHoldersInfo.setClassInfo(AUGMENTATION_HOLDER); | 263 | augmentationHoldersInfo.setClassInfo(AUGMENTATION_HOLDER); |
... | @@ -276,7 +273,7 @@ public final class YangJavaModelUtils { | ... | @@ -276,7 +273,7 @@ public final class YangJavaModelUtils { |
276 | .addToExtendsList(augmentedInfo, (YangNode) javaCodeGeneratorInfo); | 273 | .addToExtendsList(augmentedInfo, (YangNode) javaCodeGeneratorInfo); |
277 | 274 | ||
278 | } | 275 | } |
279 | - | 276 | + */ |
280 | if (javaCodeGeneratorInfo instanceof YangCase) { | 277 | if (javaCodeGeneratorInfo instanceof YangCase) { |
281 | YangNode parent = ((YangCase) javaCodeGeneratorInfo).getParent(); | 278 | YangNode parent = ((YangCase) javaCodeGeneratorInfo).getParent(); |
282 | JavaQualifiedTypeInfo parentsInfo = new JavaQualifiedTypeInfo(); | 279 | JavaQualifiedTypeInfo parentsInfo = new JavaQualifiedTypeInfo(); | ... | ... |
... | @@ -966,6 +966,7 @@ public final class UtilConstants { | ... | @@ -966,6 +966,7 @@ public final class UtilConstants { |
966 | * Static attribute for augmentable. | 966 | * Static attribute for augmentable. |
967 | */ | 967 | */ |
968 | public static final String AUGMENTABLE = "Augmentable"; | 968 | public static final String AUGMENTABLE = "Augmentable"; |
969 | + | ||
969 | /** | 970 | /** |
970 | * Static attribute for list. | 971 | * Static attribute for list. |
971 | */ | 972 | */ |
... | @@ -1018,6 +1019,11 @@ public final class UtilConstants { | ... | @@ -1018,6 +1019,11 @@ public final class UtilConstants { |
1018 | public static final String COMPONENT_ANNOTATION = "@Component"; | 1019 | public static final String COMPONENT_ANNOTATION = "@Component"; |
1019 | 1020 | ||
1020 | /** | 1021 | /** |
1022 | + * Static attribute for component. | ||
1023 | + */ | ||
1024 | + public static final String COMPONENT = "Component"; | ||
1025 | + | ||
1026 | + /** | ||
1021 | * Static attribute for immediate. | 1027 | * Static attribute for immediate. |
1022 | */ | 1028 | */ |
1023 | public static final String IMMEDIATE = "immediate"; | 1029 | public static final String IMMEDIATE = "immediate"; |
... | @@ -1134,6 +1140,16 @@ public final class UtilConstants { | ... | @@ -1134,6 +1140,16 @@ public final class UtilConstants { |
1134 | + "grouping for given uses"; | 1140 | + "grouping for given uses"; |
1135 | 1141 | ||
1136 | /** | 1142 | /** |
1143 | + * Static attribute for reference. | ||
1144 | + */ | ||
1145 | + public static final String REFERENCE = "Reference"; | ||
1146 | + | ||
1147 | + /** | ||
1148 | + * Static attribute for ReferenceCardinality. | ||
1149 | + */ | ||
1150 | + public static final String REFERENCE_CARDINALITY = "ReferenceCardinality"; | ||
1151 | + | ||
1152 | + /** | ||
1137 | * Creates an instance of util constants. | 1153 | * Creates an instance of util constants. |
1138 | */ | 1154 | */ |
1139 | private UtilConstants() { | 1155 | private UtilConstants() { | ... | ... |
... | @@ -56,8 +56,8 @@ import static org.onosproject.yangutils.utils.UtilConstants.TWELVE_SPACE_INDENTA | ... | @@ -56,8 +56,8 @@ import static org.onosproject.yangutils.utils.UtilConstants.TWELVE_SPACE_INDENTA |
56 | import static org.onosproject.yangutils.utils.UtilConstants.YANG_RESOURCES; | 56 | import static org.onosproject.yangutils.utils.UtilConstants.YANG_RESOURCES; |
57 | import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.appendFileContents; | 57 | import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.appendFileContents; |
58 | import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.updateFileHandle; | 58 | import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.updateFileHandle; |
59 | -import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc; | ||
60 | import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.PACKAGE_INFO; | 59 | import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.PACKAGE_INFO; |
60 | +import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc; | ||
61 | import static org.slf4j.LoggerFactory.getLogger; | 61 | import static org.slf4j.LoggerFactory.getLogger; |
62 | 62 | ||
63 | /** | 63 | /** |
... | @@ -67,7 +67,7 @@ public final class YangIoUtils { | ... | @@ -67,7 +67,7 @@ public final class YangIoUtils { |
67 | 67 | ||
68 | private static final Logger log = getLogger(YangIoUtils.class); | 68 | private static final Logger log = getLogger(YangIoUtils.class); |
69 | private static final String TARGET_RESOURCE_PATH = SLASH + TEMP + SLASH + YANG_RESOURCES + SLASH; | 69 | private static final String TARGET_RESOURCE_PATH = SLASH + TEMP + SLASH + YANG_RESOURCES + SLASH; |
70 | - private static final int LINE_SIZE = 116; | 70 | + private static final int LINE_SIZE = 118; |
71 | private static final int SUB_LINE_SIZE = 112; | 71 | private static final int SUB_LINE_SIZE = 112; |
72 | private static final int ZERO = 0; | 72 | private static final int ZERO = 0; |
73 | 73 | ||
... | @@ -159,7 +159,8 @@ public final class YangIoUtils { | ... | @@ -159,7 +159,8 @@ public final class YangIoUtils { |
159 | * @param dir generated directory in previous build | 159 | * @param dir generated directory in previous build |
160 | * @throws IOException when failed to delete directory | 160 | * @throws IOException when failed to delete directory |
161 | */ | 161 | */ |
162 | - public static void deleteDirectory(String dir) throws IOException { | 162 | + public static void deleteDirectory(String dir) |
163 | + throws IOException { | ||
163 | File generatedDirectory = new File(dir); | 164 | File generatedDirectory = new File(dir); |
164 | if (generatedDirectory.exists()) { | 165 | if (generatedDirectory.exists()) { |
165 | try { | 166 | try { |
... | @@ -177,7 +178,8 @@ public final class YangIoUtils { | ... | @@ -177,7 +178,8 @@ public final class YangIoUtils { |
177 | * @param root root directory | 178 | * @param root root directory |
178 | * @throws IOException when fails to do IO operations. | 179 | * @throws IOException when fails to do IO operations. |
179 | */ | 180 | */ |
180 | - public static void searchAndDeleteTempDir(String root) throws IOException { | 181 | + public static void searchAndDeleteTempDir(String root) |
182 | + throws IOException { | ||
181 | List<File> store = new LinkedList<>(); | 183 | List<File> store = new LinkedList<>(); |
182 | Stack<String> stack = new Stack<>(); | 184 | Stack<String> stack = new Stack<>(); |
183 | stack.push(root); | 185 | stack.push(root); |
... | @@ -334,7 +336,8 @@ public final class YangIoUtils { | ... | @@ -334,7 +336,8 @@ public final class YangIoUtils { |
334 | * @param srcFile main file | 336 | * @param srcFile main file |
335 | * @throws IOException when fails to append contents | 337 | * @throws IOException when fails to append contents |
336 | */ | 338 | */ |
337 | - public static void mergeJavaFiles(File appendFile, File srcFile) throws IOException { | 339 | + public static void mergeJavaFiles(File appendFile, File srcFile) |
340 | + throws IOException { | ||
338 | try { | 341 | try { |
339 | appendFileContents(appendFile, srcFile); | 342 | appendFileContents(appendFile, srcFile); |
340 | } catch (IOException e) { | 343 | } catch (IOException e) { |
... | @@ -349,7 +352,8 @@ public final class YangIoUtils { | ... | @@ -349,7 +352,8 @@ public final class YangIoUtils { |
349 | * @param data data which need to be inserted | 352 | * @param data data which need to be inserted |
350 | * @throws IOException when fails to insert into file | 353 | * @throws IOException when fails to insert into file |
351 | */ | 354 | */ |
352 | - public static void insertDataIntoJavaFile(File file, String data) throws IOException { | 355 | + public static void insertDataIntoJavaFile(File file, String data) |
356 | + throws IOException { | ||
353 | try { | 357 | try { |
354 | updateFileHandle(file, data, false); | 358 | updateFileHandle(file, data, false); |
355 | } catch (IOException e) { | 359 | } catch (IOException e) { |
... | @@ -365,7 +369,8 @@ public final class YangIoUtils { | ... | @@ -365,7 +369,8 @@ public final class YangIoUtils { |
365 | * @return updated file | 369 | * @return updated file |
366 | * @throws IOException when fails to do IO operations. | 370 | * @throws IOException when fails to do IO operations. |
367 | */ | 371 | */ |
368 | - public static File validateLineLength(File dataFile) throws IOException { | 372 | + public static File validateLineLength(File dataFile) |
373 | + throws IOException { | ||
369 | File tempFile = dataFile; | 374 | File tempFile = dataFile; |
370 | FileReader fileReader = new FileReader(dataFile); | 375 | FileReader fileReader = new FileReader(dataFile); |
371 | BufferedReader bufferReader = new BufferedReader(fileReader); | 376 | BufferedReader bufferReader = new BufferedReader(fileReader); | ... | ... |
... | @@ -19,6 +19,7 @@ package org.onosproject.yangutils.linker; | ... | @@ -19,6 +19,7 @@ package org.onosproject.yangutils.linker; |
19 | import java.io.IOException; | 19 | import java.io.IOException; |
20 | import java.util.Iterator; | 20 | import java.util.Iterator; |
21 | import java.util.ListIterator; | 21 | import java.util.ListIterator; |
22 | + | ||
22 | import org.apache.maven.plugin.MojoExecutionException; | 23 | import org.apache.maven.plugin.MojoExecutionException; |
23 | import org.junit.Test; | 24 | import org.junit.Test; |
24 | import org.onosproject.yangutils.datamodel.YangDataTypes; | 25 | import org.onosproject.yangutils.datamodel.YangDataTypes; |
... | @@ -30,12 +31,12 @@ import org.onosproject.yangutils.datamodel.YangNode; | ... | @@ -30,12 +31,12 @@ import org.onosproject.yangutils.datamodel.YangNode; |
30 | import org.onosproject.yangutils.datamodel.YangNodeType; | 31 | import org.onosproject.yangutils.datamodel.YangNodeType; |
31 | import org.onosproject.yangutils.datamodel.YangTypeDef; | 32 | import org.onosproject.yangutils.datamodel.YangTypeDef; |
32 | import org.onosproject.yangutils.datamodel.YangUses; | 33 | import org.onosproject.yangutils.datamodel.YangUses; |
33 | -import org.onosproject.yangutils.linker.impl.ResolvableStatus; | ||
34 | import org.onosproject.yangutils.linker.impl.YangLinkerManager; | 34 | import org.onosproject.yangutils.linker.impl.YangLinkerManager; |
35 | import org.onosproject.yangutils.parser.exceptions.ParserException; | 35 | import org.onosproject.yangutils.parser.exceptions.ParserException; |
36 | import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; | 36 | import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; |
37 | import org.onosproject.yangutils.plugin.manager.YangFileInfo; | 37 | import org.onosproject.yangutils.plugin.manager.YangFileInfo; |
38 | import org.onosproject.yangutils.plugin.manager.YangUtilManager; | 38 | import org.onosproject.yangutils.plugin.manager.YangUtilManager; |
39 | +import org.onosproject.yangutils.translator.tojava.utils.YangPluginConfig; | ||
39 | import org.onosproject.yangutils.utils.io.impl.YangFileScanner; | 40 | import org.onosproject.yangutils.utils.io.impl.YangFileScanner; |
40 | 41 | ||
41 | import static org.hamcrest.CoreMatchers.nullValue; | 42 | import static org.hamcrest.CoreMatchers.nullValue; |
... | @@ -44,7 +45,8 @@ import static org.hamcrest.core.Is.is; | ... | @@ -44,7 +45,8 @@ import static org.hamcrest.core.Is.is; |
44 | import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED; | 45 | import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED; |
45 | import static org.onosproject.yangutils.datamodel.YangDataTypes.STRING; | 46 | import static org.onosproject.yangutils.datamodel.YangDataTypes.STRING; |
46 | import static org.onosproject.yangutils.datamodel.YangNodeType.MODULE_NODE; | 47 | import static org.onosproject.yangutils.datamodel.YangNodeType.MODULE_NODE; |
47 | -import static org.onosproject.yangutils.linker.impl.ResolvableStatus.RESOLVED; | 48 | +import static org.onosproject.yangutils.linker.ResolvableStatus.RESOLVED; |
49 | +import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory; | ||
48 | 50 | ||
49 | /** | 51 | /** |
50 | * Test cases for testing inter file linking. | 52 | * Test cases for testing inter file linking. |
... | @@ -186,13 +188,13 @@ public class InterFileLinkingTest { | ... | @@ -186,13 +188,13 @@ public class InterFileLinkingTest { |
186 | assertThat(uses.getResolvableStatus(), | 188 | assertThat(uses.getResolvableStatus(), |
187 | is(ResolvableStatus.RESOLVED)); | 189 | is(ResolvableStatus.RESOLVED)); |
188 | 190 | ||
189 | - leafIterator = yangNode.getListOfLeaf().listIterator(); | 191 | +// leafIterator = yangNode.getListOfLeaf().listIterator(); |
190 | - leafInfo = leafIterator.next(); | 192 | +// leafInfo = leafIterator.next(); |
191 | - | 193 | +// |
192 | - // Check whether the information in the leaf is correct under module. | 194 | +// // Check whether the information in the leaf is correct under module. |
193 | - assertThat(leafInfo.getName(), is("hello")); | 195 | +// assertThat(leafInfo.getName(), is("hello")); |
194 | - assertThat(leafInfo.getDataType().getDataTypeName(), is("string")); | 196 | +// assertThat(leafInfo.getDataType().getDataTypeName(), is("string")); |
195 | - assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING)); | 197 | +// assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING)); |
196 | } | 198 | } |
197 | 199 | ||
198 | /** | 200 | /** |
... | @@ -332,13 +334,13 @@ public class InterFileLinkingTest { | ... | @@ -332,13 +334,13 @@ public class InterFileLinkingTest { |
332 | assertThat(uses.getResolvableStatus(), | 334 | assertThat(uses.getResolvableStatus(), |
333 | is(ResolvableStatus.RESOLVED)); | 335 | is(ResolvableStatus.RESOLVED)); |
334 | 336 | ||
335 | - leafIterator = yangNode.getListOfLeaf().listIterator(); | 337 | +// leafIterator = yangNode.getListOfLeaf().listIterator(); |
336 | - leafInfo = leafIterator.next(); | 338 | +// leafInfo = leafIterator.next(); |
337 | - | 339 | +// |
338 | - // Check whether the information in the leaf is correct under module. | 340 | +// // Check whether the information in the leaf is correct under module. |
339 | - assertThat(leafInfo.getName(), is("hello")); | 341 | +// assertThat(leafInfo.getName(), is("hello")); |
340 | - assertThat(leafInfo.getDataType().getDataTypeName(), is("string")); | 342 | +// assertThat(leafInfo.getDataType().getDataTypeName(), is("string")); |
341 | - assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING)); | 343 | +// assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING)); |
342 | } | 344 | } |
343 | 345 | ||
344 | /** | 346 | /** |
... | @@ -599,4 +601,117 @@ public class InterFileLinkingTest { | ... | @@ -599,4 +601,117 @@ public class InterFileLinkingTest { |
599 | assertThat(derivedInfo.getPatternRestriction(), is(nullValue())); | 601 | assertThat(derivedInfo.getPatternRestriction(), is(nullValue())); |
600 | assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue())); | 602 | assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue())); |
601 | } | 603 | } |
604 | + | ||
605 | + /** | ||
606 | + * Checks hierarchical intra with inter file type linking. | ||
607 | + */ | ||
608 | + @Test | ||
609 | + public void interFileWithUsesReferringType() | ||
610 | + throws IOException, ParserException, MojoExecutionException { | ||
611 | + | ||
612 | + String searchDir = "src/test/resources/interfilewithusesreferringtype"; | ||
613 | + utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir)); | ||
614 | + utilManager.parseYangFileInfoSet(); | ||
615 | + utilManager.resolveDependenciesUsingLinker(); | ||
616 | + | ||
617 | + String userDir = System.getProperty("user.dir"); | ||
618 | + YangPluginConfig yangPluginConfig = new YangPluginConfig(); | ||
619 | + yangPluginConfig.setCodeGenDir("target/interfilewithusesreferringtype/"); | ||
620 | + | ||
621 | + utilManager.translateToJava(utilManager.getYangFileInfoSet(), yangPluginConfig); | ||
622 | + | ||
623 | + deleteDirectory(userDir + "/target/interfilewithusesreferringtype/"); | ||
624 | + | ||
625 | + } | ||
626 | + | ||
627 | + /** | ||
628 | + * Checks hierarchical intra with inter file type linking. | ||
629 | + */ | ||
630 | + @Test | ||
631 | + public void file1UsesFile2TypeDefFile3Type() | ||
632 | + throws IOException, ParserException, MojoExecutionException { | ||
633 | + | ||
634 | + String searchDir = "src/test/resources/file1UsesFile2TypeDefFile3Type"; | ||
635 | + utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir)); | ||
636 | + utilManager.parseYangFileInfoSet(); | ||
637 | + utilManager.resolveDependenciesUsingLinker(); | ||
638 | + | ||
639 | + String userDir = System.getProperty("user.dir"); | ||
640 | + YangPluginConfig yangPluginConfig = new YangPluginConfig(); | ||
641 | + yangPluginConfig.setCodeGenDir("target/file1UsesFile2TypeDefFile3Type/"); | ||
642 | + | ||
643 | + utilManager.translateToJava(utilManager.getYangFileInfoSet(), yangPluginConfig); | ||
644 | + | ||
645 | + deleteDirectory(userDir + "/target/file1UsesFile2TypeDefFile3Type/"); | ||
646 | + | ||
647 | + } | ||
648 | + | ||
649 | + | ||
650 | + /** | ||
651 | + * Checks hierarchical intra with inter file type linking. | ||
652 | + */ | ||
653 | + @Test | ||
654 | + public void interFileIetf() | ||
655 | + throws IOException, ParserException, MojoExecutionException { | ||
656 | + | ||
657 | + String searchDir = "src/test/resources/interfileietf"; | ||
658 | + utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir)); | ||
659 | + utilManager.parseYangFileInfoSet(); | ||
660 | + utilManager.resolveDependenciesUsingLinker(); | ||
661 | + | ||
662 | + String userDir = System.getProperty("user.dir"); | ||
663 | + YangPluginConfig yangPluginConfig = new YangPluginConfig(); | ||
664 | + yangPluginConfig.setCodeGenDir("target/interfileietf/"); | ||
665 | + | ||
666 | + utilManager.translateToJava(utilManager.getYangFileInfoSet(), yangPluginConfig); | ||
667 | + | ||
668 | + deleteDirectory(userDir + "/target/interfileietf/"); | ||
669 | + | ||
670 | + } | ||
671 | + | ||
672 | + | ||
673 | + /** | ||
674 | + * Checks hierarchical intra with inter file type linking. | ||
675 | + */ | ||
676 | + @Test | ||
677 | + public void usesInContainer() | ||
678 | + throws IOException, ParserException, MojoExecutionException { | ||
679 | + | ||
680 | + String searchDir = "src/test/resources/usesInContainer"; | ||
681 | + utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir)); | ||
682 | + utilManager.parseYangFileInfoSet(); | ||
683 | + utilManager.resolveDependenciesUsingLinker(); | ||
684 | + | ||
685 | + String userDir = System.getProperty("user.dir"); | ||
686 | + YangPluginConfig yangPluginConfig = new YangPluginConfig(); | ||
687 | + yangPluginConfig.setCodeGenDir("target/usesInContainer/"); | ||
688 | + | ||
689 | + utilManager.translateToJava(utilManager.getYangFileInfoSet(), yangPluginConfig); | ||
690 | + | ||
691 | + deleteDirectory(userDir + "/target/usesInContainer/"); | ||
692 | + | ||
693 | + } | ||
694 | + | ||
695 | + | ||
696 | + /** | ||
697 | + * Checks hierarchical intra with inter file type linking. | ||
698 | + */ | ||
699 | + @Test | ||
700 | + public void groupingNodeSameAsModule() | ||
701 | + throws IOException, ParserException, MojoExecutionException { | ||
702 | + | ||
703 | + String searchDir = "src/test/resources/groupingNodeSameAsModule"; | ||
704 | + utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir)); | ||
705 | + utilManager.parseYangFileInfoSet(); | ||
706 | + utilManager.resolveDependenciesUsingLinker(); | ||
707 | + | ||
708 | + String userDir = System.getProperty("user.dir"); | ||
709 | + YangPluginConfig yangPluginConfig = new YangPluginConfig(); | ||
710 | + yangPluginConfig.setCodeGenDir("target/groupingNodeSameAsModule/"); | ||
711 | + | ||
712 | + utilManager.translateToJava(utilManager.getYangFileInfoSet(), yangPluginConfig); | ||
713 | + | ||
714 | + deleteDirectory(userDir + "/target/groupingNodeSameAsModule/"); | ||
715 | + | ||
716 | + } | ||
602 | } | 717 | } | ... | ... |
... | @@ -33,12 +33,12 @@ import static org.hamcrest.CoreMatchers.nullValue; | ... | @@ -33,12 +33,12 @@ import static org.hamcrest.CoreMatchers.nullValue; |
33 | import static org.hamcrest.MatcherAssert.assertThat; | 33 | import static org.hamcrest.MatcherAssert.assertThat; |
34 | import static org.hamcrest.core.Is.is; | 34 | import static org.hamcrest.core.Is.is; |
35 | import static org.onosproject.yangutils.datamodel.YangDataTypes.BINARY; | 35 | import static org.onosproject.yangutils.datamodel.YangDataTypes.BINARY; |
36 | +import static org.onosproject.yangutils.linker.ResolvableStatus.INTRA_FILE_RESOLVED; | ||
37 | +import static org.onosproject.yangutils.linker.ResolvableStatus.RESOLVED; | ||
36 | import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED; | 38 | import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED; |
37 | import static org.onosproject.yangutils.datamodel.YangDataTypes.INT32; | 39 | import static org.onosproject.yangutils.datamodel.YangDataTypes.INT32; |
38 | import static org.onosproject.yangutils.datamodel.YangDataTypes.STRING; | 40 | import static org.onosproject.yangutils.datamodel.YangDataTypes.STRING; |
39 | import static org.onosproject.yangutils.datamodel.YangNodeType.MODULE_NODE; | 41 | import static org.onosproject.yangutils.datamodel.YangNodeType.MODULE_NODE; |
40 | -import static org.onosproject.yangutils.linker.impl.ResolvableStatus.INTRA_FILE_RESOLVED; | ||
41 | -import static org.onosproject.yangutils.linker.impl.ResolvableStatus.RESOLVED; | ||
42 | 42 | ||
43 | /** | 43 | /** |
44 | * Test cases for testing "type" intra file linking. | 44 | * Test cases for testing "type" intra file linking. | ... | ... |
This diff is collapsed. Click to expand it.
... | @@ -40,11 +40,11 @@ import static org.hamcrest.CoreMatchers.nullValue; | ... | @@ -40,11 +40,11 @@ import static org.hamcrest.CoreMatchers.nullValue; |
40 | import static org.hamcrest.MatcherAssert.assertThat; | 40 | import static org.hamcrest.MatcherAssert.assertThat; |
41 | import static org.hamcrest.core.Is.is; | 41 | import static org.hamcrest.core.Is.is; |
42 | import static org.hamcrest.core.IsNull.notNullValue; | 42 | import static org.hamcrest.core.IsNull.notNullValue; |
43 | +import static org.onosproject.yangutils.linker.ResolvableStatus.RESOLVED; | ||
43 | import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED; | 44 | import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED; |
44 | import static org.onosproject.yangutils.datamodel.YangDataTypes.INT32; | 45 | import static org.onosproject.yangutils.datamodel.YangDataTypes.INT32; |
45 | import static org.onosproject.yangutils.datamodel.YangDataTypes.STRING; | 46 | import static org.onosproject.yangutils.datamodel.YangDataTypes.STRING; |
46 | import static org.onosproject.yangutils.datamodel.YangNodeType.MODULE_NODE; | 47 | import static org.onosproject.yangutils.datamodel.YangNodeType.MODULE_NODE; |
47 | -import static org.onosproject.yangutils.linker.impl.ResolvableStatus.RESOLVED; | ||
48 | 48 | ||
49 | /** | 49 | /** |
50 | * Test cases for testing restriction resolution. | 50 | * Test cases for testing restriction resolution. | ... | ... |
... | @@ -32,6 +32,7 @@ public class TreeWalkListenerTest { | ... | @@ -32,6 +32,7 @@ public class TreeWalkListenerTest { |
32 | 32 | ||
33 | @Rule | 33 | @Rule |
34 | public ExpectedException thrown = ExpectedException.none(); | 34 | public ExpectedException thrown = ExpectedException.none(); |
35 | + | ||
35 | /** | 36 | /** |
36 | * Checks whether exception is thrown for ordered statement. | 37 | * Checks whether exception is thrown for ordered statement. |
37 | */ | 38 | */ | ... | ... |
... | @@ -18,6 +18,7 @@ package org.onosproject.yangutils.parser.impl.listeners; | ... | @@ -18,6 +18,7 @@ package org.onosproject.yangutils.parser.impl.listeners; |
18 | 18 | ||
19 | import java.io.IOException; | 19 | import java.io.IOException; |
20 | import java.util.ListIterator; | 20 | import java.util.ListIterator; |
21 | + | ||
21 | import org.junit.Test; | 22 | import org.junit.Test; |
22 | import org.onosproject.yangutils.datamodel.YangDataTypes; | 23 | import org.onosproject.yangutils.datamodel.YangDataTypes; |
23 | import org.onosproject.yangutils.datamodel.YangLeaf; | 24 | import org.onosproject.yangutils.datamodel.YangLeaf; | ... | ... |
utils/yangutils/src/test/resources/file1UsesFile2TypeDefFile3Type/ietf-network-topology.yang
0 → 100644
1 | + module ietf-network-topology { | ||
2 | + yang-version 1; | ||
3 | + namespace "urn:ietf:params:xml:ns:yang:ietf-network-topology"; | ||
4 | + prefix lnk; | ||
5 | + | ||
6 | + import ietf-inet-types { | ||
7 | + prefix inet; | ||
8 | + } | ||
9 | + | ||
10 | + typedef tp-id { | ||
11 | + type inet:uri; | ||
12 | + description | ||
13 | + "An identifier for termination points on a node. | ||
14 | + The identifier SHOULD be chosen such that the same TP in a | ||
15 | + real network topology will always be identified through the | ||
16 | + same identifier, even if the model is instantiated in | ||
17 | + separate datastores. An implementation MAY choose to capture | ||
18 | + semantics in the identifier, for example to indicate the type | ||
19 | + of TP and/or the type of node and topology that the TP is a | ||
20 | + part of."; | ||
21 | + } | ||
22 | + | ||
23 | + grouping tp-ref { | ||
24 | + description | ||
25 | + "References a termination point in a specific node."; | ||
26 | + leaf tp-ref { | ||
27 | + type tp-id; | ||
28 | + description | ||
29 | + "A type for an absolute reference to a termination point. | ||
30 | + (This type should not be used for relative references. | ||
31 | + In such a case, a relative path should be used instead.)"; | ||
32 | + } | ||
33 | + } | ||
34 | + } |
1 | + module ietf-te-topology { | ||
2 | + yang-version 1; | ||
3 | + namespace "urn:ietf:params:xml:ns:yang:ietf-te-topology"; | ||
4 | + // replace with IANA namespace when assigned | ||
5 | + | ||
6 | + prefix "tet"; | ||
7 | + | ||
8 | + import ietf-network-topology { | ||
9 | + prefix "nt"; | ||
10 | + } | ||
11 | + | ||
12 | + container underlay-trail-src { | ||
13 | + uses nt:tp-ref; | ||
14 | + description | ||
15 | + "Source TE link of the underlay trail."; | ||
16 | + } | ||
17 | + } |
1 | +module port-pair { | ||
2 | + | ||
3 | + yang-version 1; | ||
4 | + | ||
5 | + namespace "sfc.portpair"; | ||
6 | + | ||
7 | + prefix "port-pair"; | ||
8 | + | ||
9 | + grouping port-pair { | ||
10 | + container port-pair { | ||
11 | + | ||
12 | + leaf name { | ||
13 | + type string; | ||
14 | + } | ||
15 | + | ||
16 | + | ||
17 | + leaf description { | ||
18 | + type string; | ||
19 | + } | ||
20 | + | ||
21 | + } | ||
22 | + } | ||
23 | + | ||
24 | + rpc get-port-pair { | ||
25 | + output { | ||
26 | + uses port-pair; | ||
27 | + } | ||
28 | + } | ||
29 | +} |
This diff is collapsed. Click to expand it.
1 | + module ietf-network-topology { | ||
2 | + yang-version 1; | ||
3 | + namespace "urn:ietf:params:xml:ns:yang:ietf-network-topology"; | ||
4 | + prefix lnk; | ||
5 | + | ||
6 | + import ietf-inet-types { | ||
7 | + prefix inet; | ||
8 | + } | ||
9 | + import ietf-network { | ||
10 | + prefix nd; | ||
11 | + } | ||
12 | + | ||
13 | + organization | ||
14 | + "IETF I2RS (Interface to the Routing System) Working Group"; | ||
15 | + | ||
16 | + contact | ||
17 | + "WG Web: <http://tools.ietf.org/wg/i2rs/> | ||
18 | + WG List: <mailto:i2rs@ietf.org> | ||
19 | + | ||
20 | + WG Chair: Susan Hares | ||
21 | + <mailto:shares@ndzh.com> | ||
22 | + | ||
23 | + WG Chair: Jeffrey Haas | ||
24 | + <mailto:jhaas@pfrc.org> | ||
25 | + | ||
26 | + Editor: Alexander Clemm | ||
27 | + <mailto:alex@cisco.com> | ||
28 | + | ||
29 | + Editor: Jan Medved | ||
30 | + <mailto:jmedved@cisco.com> | ||
31 | + | ||
32 | + Editor: Robert Varga | ||
33 | + <mailto:rovarga@cisco.com> | ||
34 | + | ||
35 | + Editor: Tony Tkacik | ||
36 | + <mailto:ttkacik@cisco.com> | ||
37 | + | ||
38 | + Editor: Nitin Bahadur | ||
39 | + <mailto:nitin_bahadur@yahoo.com> | ||
40 | + | ||
41 | + Editor: Hariharan Ananthakrishnan | ||
42 | + <mailto:hari@packetdesign.com>"; | ||
43 | + | ||
44 | + description | ||
45 | + "This module defines a common base model for network topology, | ||
46 | + augmenting the base network model with links to connect nodes, | ||
47 | + as well as termination points to terminate links on nodes. | ||
48 | + | ||
49 | + Copyright (c) 2015 IETF Trust and the persons identified as | ||
50 | + authors of the code. All rights reserved. | ||
51 | + | ||
52 | + Redistribution and use in source and binary forms, with or | ||
53 | + without modification, is permitted pursuant to, and subject | ||
54 | + to the license terms contained in, the Simplified BSD License | ||
55 | + set forth in Section 4.c of the IETF Trust's Legal Provisions | ||
56 | + Relating to IETF Documents | ||
57 | + (http://trustee.ietf.org/license-info). | ||
58 | + | ||
59 | + This version of this YANG module is part of | ||
60 | + draft-ietf-i2rs-yang-network-topo-02; | ||
61 | + see the RFC itself for full legal notices. | ||
62 | + | ||
63 | + NOTE TO RFC EDITOR: Please replace above reference to | ||
64 | + draft-ietf-i2rs-yang-network-topo-02 with RFC | ||
65 | + number when published (i.e. RFC xxxx)."; | ||
66 | + | ||
67 | + revision 2015-12-08 { | ||
68 | + description | ||
69 | + "Initial revision. | ||
70 | + NOTE TO RFC EDITOR: Please replace the following reference | ||
71 | + to draft-ietf-i2rs-yang-network-topo-02 with | ||
72 | + RFC number when published (i.e. RFC xxxx)."; | ||
73 | + reference | ||
74 | + "draft-ietf-i2rs-yang-network-topo-02."; | ||
75 | + } | ||
76 | + | ||
77 | + typedef link-id { | ||
78 | + type inet:uri; | ||
79 | + description | ||
80 | + "An identifier for a link in a topology. | ||
81 | + The identifier SHOULD be chosen such that the same link in a | ||
82 | + real network topology will always be identified through the | ||
83 | + same identifier, even if the model is instantiated in | ||
84 | + separate datastores. An implementation MAY choose to capture | ||
85 | + semantics in the identifier, for example to indicate the type | ||
86 | + of link and/or the type of topology that the link is a part | ||
87 | + of."; | ||
88 | + } | ||
89 | + | ||
90 | + typedef tp-id { | ||
91 | + type inet:uri; | ||
92 | + description | ||
93 | + "An identifier for termination points on a node. | ||
94 | + The identifier SHOULD be chosen such that the same TP in a | ||
95 | + real network topology will always be identified through the | ||
96 | + same identifier, even if the model is instantiated in | ||
97 | + separate datastores. An implementation MAY choose to capture | ||
98 | + semantics in the identifier, for example to indicate the type | ||
99 | + of TP and/or the type of node and topology that the TP is a | ||
100 | + part of."; | ||
101 | + } | ||
102 | + grouping link-ref { | ||
103 | + description | ||
104 | + "References a link in a specific network."; | ||
105 | + leaf link-ref { | ||
106 | + type link-id; | ||
107 | + description | ||
108 | + "A type for an absolute reference a link instance. | ||
109 | + (This type should not be used for relative references. | ||
110 | + In such a case, a relative path should be used instead.)"; | ||
111 | + } | ||
112 | + uses nd:network-ref; | ||
113 | + } | ||
114 | + | ||
115 | + grouping tp-ref { | ||
116 | + description | ||
117 | + "References a termination point in a specific node."; | ||
118 | + leaf tp-ref { | ||
119 | + type tp-id; | ||
120 | + description | ||
121 | + "A type for an absolute reference to a termination point. | ||
122 | + (This type should not be used for relative references. | ||
123 | + In such a case, a relative path should be used instead.)"; | ||
124 | + } | ||
125 | + uses nd:node-ref; | ||
126 | + } | ||
127 | + | ||
128 | + augment "/nd:networks/nd:network" { | ||
129 | + description | ||
130 | + "Add links to the network model."; | ||
131 | + list link { | ||
132 | + key "link-id"; | ||
133 | + description | ||
134 | + "A Network Link connects a by Local (Source) node and | ||
135 | + a Remote (Destination) Network Nodes via a set of the | ||
136 | + nodes' termination points. | ||
137 | + As it is possible to have several links between the same | ||
138 | + source and destination nodes, and as a link could | ||
139 | + potentially be re-homed between termination points, to | ||
140 | + ensure that we would always know to distinguish between | ||
141 | + links, every link is identified by a dedicated link | ||
142 | + identifier. | ||
143 | + Note that a link models a point-to-point link, not a | ||
144 | + multipoint link. | ||
145 | + Layering dependencies on links in underlay topologies are | ||
146 | + not represented as the layering information of nodes and of | ||
147 | + termination points is sufficient."; | ||
148 | + container source { | ||
149 | + description | ||
150 | + "This container holds the logical source of a particular | ||
151 | + link."; | ||
152 | + leaf source-node { | ||
153 | + type nd:node-id; | ||
154 | + mandatory true; | ||
155 | + description | ||
156 | + "Source node identifier, must be in same topology."; | ||
157 | + } | ||
158 | + leaf source-tp { | ||
159 | + type tp-id; | ||
160 | + description | ||
161 | + "Termination point within source node that terminates | ||
162 | + the link."; | ||
163 | + } | ||
164 | + } | ||
165 | + container destination { | ||
166 | + description | ||
167 | + "This container holds the logical destination of a | ||
168 | + particular link."; | ||
169 | + leaf dest-node { | ||
170 | + type nd:node-id; | ||
171 | + mandatory true; | ||
172 | + description | ||
173 | + "Destination node identifier, must be in the same | ||
174 | + network."; | ||
175 | + } | ||
176 | + leaf dest-tp { | ||
177 | + type tp-id; | ||
178 | + description | ||
179 | + "Termination point within destination node that | ||
180 | + terminates the link."; | ||
181 | + } | ||
182 | + } | ||
183 | + leaf link-id { | ||
184 | + type link-id; | ||
185 | + description | ||
186 | + "The identifier of a link in the topology. | ||
187 | + A link is specific to a topology to which it belongs."; | ||
188 | + } | ||
189 | + list supporting-link { | ||
190 | + key "network-ref link-ref"; | ||
191 | + description | ||
192 | + "Identifies the link, or links, that this link | ||
193 | + is dependent on."; | ||
194 | + leaf network-ref { | ||
195 | + type nd:network-id; | ||
196 | + description | ||
197 | + "This leaf identifies in which underlay topology | ||
198 | + supporting link is present."; | ||
199 | + } | ||
200 | + leaf link-ref { | ||
201 | + type link-id; | ||
202 | + description | ||
203 | + "This leaf identifies a link which is a part | ||
204 | + of this link's underlay. Reference loops, in which | ||
205 | + a link identifies itself as its underlay, either | ||
206 | + directly or transitively, are not allowed."; | ||
207 | + } | ||
208 | + } | ||
209 | + } | ||
210 | + } | ||
211 | + augment "/nd:networks/nd:network/nd:node" { | ||
212 | + description | ||
213 | + "Augment termination points which terminate links. | ||
214 | + Termination points can ultimately be mapped to interfaces."; | ||
215 | + list termination-point { | ||
216 | + key "tp-id"; | ||
217 | + description | ||
218 | + "A termination point can terminate a link. | ||
219 | + Depending on the type of topology, a termination point | ||
220 | + could, for example, refer to a port or an interface."; | ||
221 | + leaf tp-id { | ||
222 | + type tp-id; | ||
223 | + description | ||
224 | + "Termination point identifier."; | ||
225 | + } | ||
226 | + list supporting-termination-point { | ||
227 | + key "network-ref node-ref tp-ref"; | ||
228 | + description | ||
229 | + "The leaf list identifies any termination points that | ||
230 | + the termination point is dependent on, or maps onto. | ||
231 | + Those termination points will themselves be contained | ||
232 | + in a supporting node. | ||
233 | + This dependency information can be inferred from | ||
234 | + the dependencies between links. For this reason, | ||
235 | + this item is not separately configurable. Hence no | ||
236 | + corresponding constraint needs to be articulated. | ||
237 | + The corresponding information is simply provided by the | ||
238 | + implementing system."; | ||
239 | + leaf network-ref { | ||
240 | + type nd:network-id; | ||
241 | + description | ||
242 | + "This leaf identifies in which topology the | ||
243 | + supporting termination point is present."; | ||
244 | + } | ||
245 | + leaf node-ref { | ||
246 | + type nd:node-id; | ||
247 | + description | ||
248 | + "This leaf identifies in which node the supporting | ||
249 | + termination point is present."; | ||
250 | + } | ||
251 | + leaf tp-ref { | ||
252 | + type tp-id; | ||
253 | + description | ||
254 | + "Reference to the underlay node, must be in a | ||
255 | + different topology"; | ||
256 | + } | ||
257 | + } | ||
258 | + } | ||
259 | + } | ||
260 | + } |
1 | + module ietf-network { | ||
2 | + yang-version 1; | ||
3 | + namespace "urn:ietf:params:xml:ns:yang:ietf-network"; | ||
4 | + prefix nd; | ||
5 | + | ||
6 | + import ietf-inet-types { | ||
7 | + prefix inet; | ||
8 | + } | ||
9 | + | ||
10 | + organization | ||
11 | + "IETF I2RS (Interface to the Routing System) Working Group"; | ||
12 | + | ||
13 | + contact | ||
14 | + "WG Web: <http://tools.ietf.org/wg/i2rs/> | ||
15 | + WG List: <mailto:i2rs@ietf.org> | ||
16 | + | ||
17 | + WG Chair: Susan Hares | ||
18 | + <mailto:shares@ndzh.com> | ||
19 | + | ||
20 | + WG Chair: Jeffrey Haas | ||
21 | + <mailto:jhaas@pfrc.org> | ||
22 | + | ||
23 | + Editor: Alexander Clemm | ||
24 | + <mailto:alex@cisco.com> | ||
25 | + | ||
26 | + Editor: Jan Medved | ||
27 | + <mailto:jmedved@cisco.com> | ||
28 | + | ||
29 | + Editor: Robert Varga | ||
30 | + <mailto:rovarga@cisco.com> | ||
31 | + | ||
32 | + Editor: Tony Tkacik | ||
33 | + <mailto:ttkacik@cisco.com> | ||
34 | + | ||
35 | + Editor: Nitin Bahadur | ||
36 | + <mailto:nitin_bahadur@yahoo.com> | ||
37 | + | ||
38 | + Editor: Hariharan Ananthakrishnan | ||
39 | + <mailto:hari@packetdesign.com>"; | ||
40 | + | ||
41 | + description | ||
42 | + "This module defines a common base model for a collection | ||
43 | + of nodes in a network. Node definitions are further used | ||
44 | + in network topologies and inventories. | ||
45 | + | ||
46 | + Copyright (c) 2015 IETF Trust and the persons identified as | ||
47 | + authors of the code. All rights reserved. | ||
48 | + | ||
49 | + Redistribution and use in source and binary forms, with or | ||
50 | + without modification, is permitted pursuant to, and subject | ||
51 | + to the license terms contained in, the Simplified BSD License | ||
52 | + set forth in Section 4.c of the IETF Trust's Legal Provisions | ||
53 | + Relating to IETF Documents | ||
54 | + (http://trustee.ietf.org/license-info). | ||
55 | + | ||
56 | + This version of this YANG module is part of | ||
57 | + draft-ietf-i2rs-yang-network-topo-02; | ||
58 | + see the RFC itself for full legal notices. | ||
59 | + | ||
60 | + NOTE TO RFC EDITOR: Please replace above reference to | ||
61 | + draft-ietf-i2rs-yang-network-topo-02 with RFC | ||
62 | + number when published (i.e. RFC xxxx)."; | ||
63 | + | ||
64 | + revision 2015-12-08 { | ||
65 | + description | ||
66 | + "Initial revision. | ||
67 | + NOTE TO RFC EDITOR: Please replace the following reference | ||
68 | + to draft-ietf-i2rs-yang-network-topo-02 with | ||
69 | + RFC number when published (i.e. RFC xxxx)."; | ||
70 | + reference | ||
71 | + "draft-ietf-i2rs-yang-network-topo-02"; | ||
72 | + } | ||
73 | + | ||
74 | + typedef node-id { | ||
75 | + type inet:uri; | ||
76 | + description | ||
77 | + "Identifier for a node."; | ||
78 | + } | ||
79 | + | ||
80 | + typedef network-id { | ||
81 | + type inet:uri; | ||
82 | + description | ||
83 | + "Identifier for a network."; | ||
84 | + } | ||
85 | + grouping network-ref { | ||
86 | + description | ||
87 | + "Contains the information necessary to reference a network, | ||
88 | + for example an underlay network."; | ||
89 | + leaf network-ref { | ||
90 | + type network-id; | ||
91 | + description | ||
92 | + "Used to reference a network, for example an underlay | ||
93 | + network."; | ||
94 | + } | ||
95 | + } | ||
96 | + | ||
97 | + grouping node-ref { | ||
98 | + description | ||
99 | + "Contains the information necessary to reference a node."; | ||
100 | + leaf node-ref { | ||
101 | + type node-id; | ||
102 | + description | ||
103 | + "Used to reference a node. | ||
104 | + Nodes are identified relative to the network they are | ||
105 | + contained in."; | ||
106 | + } | ||
107 | + uses network-ref; | ||
108 | + } | ||
109 | + | ||
110 | + container networks { | ||
111 | + description | ||
112 | + "Serves as top-level container for a list of networks."; | ||
113 | + list network { | ||
114 | + key "network-id"; | ||
115 | + description | ||
116 | + "Describes a network. | ||
117 | + A network typically contains an inventory of nodes, | ||
118 | + topological information (augmented through | ||
119 | + network-topology model), as well as layering | ||
120 | + information."; | ||
121 | + container network-types { | ||
122 | + description | ||
123 | + "Serves as an augmentation target. | ||
124 | + The network type is indicated through corresponding | ||
125 | + presence containers augmented into this container."; | ||
126 | + } | ||
127 | + leaf network-id { | ||
128 | + type network-id; | ||
129 | + description | ||
130 | + "Identifies a network."; | ||
131 | + } | ||
132 | + list supporting-network { | ||
133 | + key "network-ref"; | ||
134 | + description | ||
135 | + "An underlay network, used to represent layered network | ||
136 | + topologies."; | ||
137 | + leaf network-ref { | ||
138 | + type network-id; | ||
139 | + description | ||
140 | + "References the underlay network."; | ||
141 | + } | ||
142 | + } | ||
143 | + list node { | ||
144 | + key "node-id"; | ||
145 | + description | ||
146 | + "The inventory of nodes of this network."; | ||
147 | + leaf node-id { | ||
148 | + type node-id; | ||
149 | + description | ||
150 | + "Identifies a node uniquely within the containing | ||
151 | + network."; | ||
152 | + } | ||
153 | + list supporting-node { | ||
154 | + key "network-ref node-ref"; | ||
155 | + description | ||
156 | + "Represents another node, in an underlay network, that | ||
157 | + this node is supported by. Used to represent layering | ||
158 | + structure."; | ||
159 | + leaf network-ref { | ||
160 | + type network-id; | ||
161 | + description | ||
162 | + "References the underlay network that the | ||
163 | + underlay node is part of."; | ||
164 | + } | ||
165 | + leaf node-ref { | ||
166 | + type node-id; | ||
167 | + description | ||
168 | + "References the underlay node itself."; | ||
169 | + } | ||
170 | + } | ||
171 | + } | ||
172 | + } | ||
173 | + } | ||
174 | + container networks-state { | ||
175 | + config false; | ||
176 | + description | ||
177 | + "Serves as top-level container for a list of state information | ||
178 | + for networks"; | ||
179 | + list network { | ||
180 | + key "network-ref"; | ||
181 | + description | ||
182 | + "Data nodes representing operational data and state of | ||
183 | + networks. | ||
184 | + An instance is automatically created for every network | ||
185 | + in the corresponding list under the networks container."; | ||
186 | + uses network-ref; | ||
187 | + leaf server-provided { | ||
188 | + type boolean; | ||
189 | + description | ||
190 | + "Indicates whether the information concerning this | ||
191 | + particular network is populated by the server | ||
192 | + (server-provided true, the general case for network | ||
193 | + information discovered from the server), | ||
194 | + or whether it is configured by a client | ||
195 | + (server-provided true, possible e.g. for | ||
196 | + service overlays managed through a controller)."; | ||
197 | + } | ||
198 | + } | ||
199 | + } | ||
200 | + } |
1 | + module ietf-schedule { | ||
2 | + yang-version 1; | ||
3 | + namespace "urn:ietf:params:xml:ns:yang:ietf-schedule"; | ||
4 | + // replace with IANA namespace when assigned | ||
5 | + | ||
6 | + prefix "sch"; | ||
7 | + | ||
8 | + import ietf-yang-types { | ||
9 | + prefix "yang"; | ||
10 | + } | ||
11 | + | ||
12 | + organization "TBD"; | ||
13 | + contact "TBD"; | ||
14 | + description | ||
15 | + "The model allows time scheduling parameters to be specified."; | ||
16 | + | ||
17 | + revision "2016-03-01" { | ||
18 | + description "Initial revision"; | ||
19 | + reference "TBD"; | ||
20 | + } | ||
21 | + | ||
22 | + /* | ||
23 | + * Groupings | ||
24 | + */ | ||
25 | + | ||
26 | + grouping schedules { | ||
27 | + description | ||
28 | + "A list of schedules defining when a particular | ||
29 | + configuration takes effect."; | ||
30 | + container schedules { | ||
31 | + description | ||
32 | + "Container of a schedule list defining when a particular | ||
33 | + configuration takes effect."; | ||
34 | + list schedule { | ||
35 | + key "schedule-id"; | ||
36 | + description "A list of schedule elements."; | ||
37 | + | ||
38 | + leaf schedule-id { | ||
39 | + type uint32; | ||
40 | + description "Identifies the schedule element."; | ||
41 | + } | ||
42 | + leaf start { | ||
43 | + type yang:date-and-time; | ||
44 | + description "Start time."; | ||
45 | + } | ||
46 | + leaf schedule-duration { | ||
47 | + type string { | ||
48 | + pattern | ||
49 | + 'P(\d+Y)?(\d+M)?(\d+W)?(\d+D)?T(\d+H)?(\d+M)?(\d+S)?'; | ||
50 | + } | ||
51 | + description "Schedule duration in ISO 8601 format."; | ||
52 | + } | ||
53 | + leaf repeat-interval { | ||
54 | + type string { | ||
55 | + pattern | ||
56 | + 'R\d*/P(\d+Y)?(\d+M)?(\d+W)?(\d+D)?T(\d+H)?(\d+M)?' | ||
57 | + + '(\d+S)?'; | ||
58 | + } | ||
59 | + description "Repeat interval in ISO 8601 format."; | ||
60 | + } | ||
61 | + } | ||
62 | + } | ||
63 | + } // schedules | ||
64 | + } |
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
1 | + module ietf-network { | ||
2 | + yang-version 1; | ||
3 | + namespace "urn:ietf:params:xml:ns:yang:ietf-network"; | ||
4 | + prefix nd; | ||
5 | + | ||
6 | + container networks { | ||
7 | + container network-types { | ||
8 | + description | ||
9 | + "Serves as an augmentation target. | ||
10 | + The network type is indicated through corresponding | ||
11 | + presence containers augmented into this container."; | ||
12 | + } | ||
13 | + } | ||
14 | +} |
1 | + module ietf-te-topology { | ||
2 | + yang-version 1; | ||
3 | + namespace "urn:ietf:params:xml:ns:yang:ietf-te-topology"; | ||
4 | + // replace with IANA namespace when assigned | ||
5 | + | ||
6 | + prefix "tet"; | ||
7 | + | ||
8 | + import ietf-network { | ||
9 | + prefix "nw"; | ||
10 | + } | ||
11 | + | ||
12 | + grouping te-topologies-augment { | ||
13 | + description | ||
14 | + "Augmentation for TE topologies."; | ||
15 | + leaf reference-change-policy { | ||
16 | + type enumeration { | ||
17 | + enum no-action { | ||
18 | + description | ||
19 | + "When an attribute changes in this template, the | ||
20 | + configuration node referring to this template does | ||
21 | + not take any action."; | ||
22 | + } | ||
23 | + enum not-allowed { | ||
24 | + description | ||
25 | + "When any configuration object has a reference to this | ||
26 | + template, changing this template is not allowed."; | ||
27 | + } | ||
28 | + enum cascade { | ||
29 | + description | ||
30 | + "When an attribute changes in this template, the | ||
31 | + configuration object referring to this template applies | ||
32 | + the new attribute value to the corresponding | ||
33 | + configuration."; | ||
34 | + } | ||
35 | + } | ||
36 | + description | ||
37 | + "This attribute specifies the action taken to a configuration | ||
38 | + node that has a reference to this template."; | ||
39 | + } | ||
40 | + } // te-topologies-augment | ||
41 | + | ||
42 | + | ||
43 | + | ||
44 | + augment "/nw:networks" { | ||
45 | + description | ||
46 | + "Augmentation parameters for TE topologies."; | ||
47 | + uses te-topologies-augment; | ||
48 | + } | ||
49 | + | ||
50 | + | ||
51 | +} |
1 | + | ||
2 | +module ietf-sd-onos-service-types { | ||
3 | + | ||
4 | + namespace "urn:ietf:params:xml:ns:yang:ietf-sd-onos-service-types"; | ||
5 | + prefix service-types ; | ||
6 | + | ||
7 | + grouping qos-if-car { | ||
8 | + description "qos parameter." ; | ||
9 | + list qos-if-car { | ||
10 | + key "direction"; | ||
11 | + description "cars qos policy." ; | ||
12 | + leaf direction { | ||
13 | + type enumeration { | ||
14 | + enum inbound{ | ||
15 | + value 0 ; | ||
16 | + description "inbound." ; | ||
17 | + } | ||
18 | + enum outbound { | ||
19 | + value 1 ; | ||
20 | + description "outbound." ; | ||
21 | + } | ||
22 | + } | ||
23 | + description "qos for interface car" ; | ||
24 | + } | ||
25 | +} | ||
26 | +} | ||
27 | + | ||
28 | + container qos-policy { | ||
29 | + description "The qos policy of the vpn service." ; | ||
30 | + container qos-if-cars { | ||
31 | + description "qos policy if car." ; | ||
32 | + list qos-if-car { | ||
33 | + key "direction"; | ||
34 | + uses qos-if-car; | ||
35 | + description "List of qos parameters." ; | ||
36 | + } | ||
37 | + } | ||
38 | + } | ||
39 | + | ||
40 | + rpc close-l3vpn { | ||
41 | + description "Close l3vpn." ; | ||
42 | + input { | ||
43 | + leaf l3vpn-id { | ||
44 | + type string; | ||
45 | + description "vpn id." ; | ||
46 | + } | ||
47 | + container ac-status { | ||
48 | + description "Access status of the vpn." ; | ||
49 | + list acs{ | ||
50 | + key "id"; | ||
51 | + description "Access information." ; | ||
52 | + leaf id { | ||
53 | + type string; | ||
54 | + description "Access id." ; | ||
55 | + } | ||
56 | + leaf admin-status { | ||
57 | + type string; | ||
58 | + description "Administration status." ; | ||
59 | + } | ||
60 | + } | ||
61 | + } | ||
62 | + } | ||
63 | + } | ||
64 | +} |
-
Please register or login to post a comment