Committed by
Patrick Liu
[ONOS-4744] Leafref implementation and UT
Change-Id: I151797185e0bb1695c0640b667ae76ef87c4d4b0
Showing
73 changed files
with
2037 additions
and
112 deletions
| ... | @@ -34,5 +34,10 @@ public enum ResolvableType { | ... | @@ -34,5 +34,10 @@ public enum ResolvableType { |
| 34 | /** | 34 | /** |
| 35 | * Identifies the if-feature. | 35 | * Identifies the if-feature. |
| 36 | */ | 36 | */ |
| 37 | - YANG_IF_FEATURE | 37 | + YANG_IF_FEATURE, |
| 38 | + | ||
| 39 | + /** | ||
| 40 | + * Identifies the leafref. | ||
| 41 | + */ | ||
| 42 | + YANG_LEAFREF | ||
| 38 | } | 43 | } | ... | ... |
| ... | @@ -24,6 +24,11 @@ import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes; | ... | @@ -24,6 +24,11 @@ import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes; |
| 24 | 24 | ||
| 25 | import com.google.common.base.Strings; | 25 | import com.google.common.base.Strings; |
| 26 | 26 | ||
| 27 | +import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.INTRA_FILE_RESOLVED; | ||
| 28 | +import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.RESOLVED; | ||
| 29 | +import static org.onosproject.yangutils.datamodel.utils.RestrictionResolver.processLengthRestriction; | ||
| 30 | +import static org.onosproject.yangutils.datamodel.utils.RestrictionResolver.processRangeRestriction; | ||
| 31 | +import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypeUtils.isOfRangeRestrictedType; | ||
| 27 | import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BINARY; | 32 | import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BINARY; |
| 28 | import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BITS; | 33 | import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BITS; |
| 29 | import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BOOLEAN; | 34 | import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BOOLEAN; |
| ... | @@ -34,11 +39,6 @@ import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangData | ... | @@ -34,11 +39,6 @@ import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangData |
| 34 | import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.LEAFREF; | 39 | import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.LEAFREF; |
| 35 | import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.STRING; | 40 | import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.STRING; |
| 36 | import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.UNION; | 41 | import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.UNION; |
| 37 | -import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.INTRA_FILE_RESOLVED; | ||
| 38 | -import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.RESOLVED; | ||
| 39 | -import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypeUtils.isOfRangeRestrictedType; | ||
| 40 | -import static org.onosproject.yangutils.datamodel.utils.RestrictionResolver.processLengthRestriction; | ||
| 41 | -import static org.onosproject.yangutils.datamodel.utils.RestrictionResolver.processRangeRestriction; | ||
| 42 | 42 | ||
| 43 | /** | 43 | /** |
| 44 | * Represents the derived information. | 44 | * Represents the derived information. |
| ... | @@ -334,6 +334,9 @@ public class YangDerivedInfo<T> | ... | @@ -334,6 +334,9 @@ public class YangDerivedInfo<T> |
| 334 | return RESOLVED; | 334 | return RESOLVED; |
| 335 | } | 335 | } |
| 336 | } | 336 | } |
| 337 | + } else if (baseType.getDataType() == LEAFREF) { | ||
| 338 | + setEffectiveBuiltInType(baseType.getDataType()); | ||
| 339 | + return RESOLVED; | ||
| 337 | } else { | 340 | } else { |
| 338 | setEffectiveBuiltInType(baseType.getDataType()); | 341 | setEffectiveBuiltInType(baseType.getDataType()); |
| 339 | /* | 342 | /* |
| ... | @@ -412,7 +415,6 @@ public class YangDerivedInfo<T> | ... | @@ -412,7 +415,6 @@ public class YangDerivedInfo<T> |
| 412 | } | 415 | } |
| 413 | } | 416 | } |
| 414 | } | 417 | } |
| 415 | - | ||
| 416 | /* | 418 | /* |
| 417 | * Check if the data type is the one which can't be restricted, in this | 419 | * Check if the data type is the one which can't be restricted, in this |
| 418 | * case check whether no self restrictions should be present. | 420 | * case check whether no self restrictions should be present. |
| ... | @@ -426,7 +428,6 @@ public class YangDerivedInfo<T> | ... | @@ -426,7 +428,6 @@ public class YangDerivedInfo<T> |
| 426 | throw new DataModelException("YANG file error: Restrictions can't be applied to a given type"); | 428 | throw new DataModelException("YANG file error: Restrictions can't be applied to a given type"); |
| 427 | } | 429 | } |
| 428 | } | 430 | } |
| 429 | - | ||
| 430 | // Throw exception for unsupported types | 431 | // Throw exception for unsupported types |
| 431 | throw new DataModelException("Linker error: Unable to process the derived type."); | 432 | throw new DataModelException("Linker error: Unable to process the derived type."); |
| 432 | } | 433 | } | ... | ... |
utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeafRef.java
0 → 100644
This diff is collapsed. Click to expand it.
| ... | @@ -211,6 +211,11 @@ public class YangModule | ... | @@ -211,6 +211,11 @@ public class YangModule |
| 211 | private List<YangResolutionInfo> ifFeatureResolutionList; | 211 | private List<YangResolutionInfo> ifFeatureResolutionList; |
| 212 | 212 | ||
| 213 | /** | 213 | /** |
| 214 | + * leafref resolution list. | ||
| 215 | + */ | ||
| 216 | + private List<YangResolutionInfo> leafrefResolutionList; | ||
| 217 | + | ||
| 218 | + /** | ||
| 214 | * Creates a YANG node of module type. | 219 | * Creates a YANG node of module type. |
| 215 | */ | 220 | */ |
| 216 | public YangModule() { | 221 | public YangModule() { |
| ... | @@ -219,6 +224,7 @@ public class YangModule | ... | @@ -219,6 +224,7 @@ public class YangModule |
| 219 | derivedTypeResolutionList = new LinkedList<>(); | 224 | derivedTypeResolutionList = new LinkedList<>(); |
| 220 | usesResolutionList = new LinkedList<>(); | 225 | usesResolutionList = new LinkedList<>(); |
| 221 | ifFeatureResolutionList = new LinkedList<>(); | 226 | ifFeatureResolutionList = new LinkedList<>(); |
| 227 | + leafrefResolutionList = new LinkedList<>(); | ||
| 222 | importList = new LinkedList<YangImport>(); | 228 | importList = new LinkedList<YangImport>(); |
| 223 | includeList = new LinkedList<YangInclude>(); | 229 | includeList = new LinkedList<YangInclude>(); |
| 224 | listOfLeaf = new LinkedList<YangLeaf>(); | 230 | listOfLeaf = new LinkedList<YangLeaf>(); |
| ... | @@ -589,8 +595,10 @@ public class YangModule | ... | @@ -589,8 +595,10 @@ public class YangModule |
| 589 | return derivedTypeResolutionList; | 595 | return derivedTypeResolutionList; |
| 590 | } else if (type == ResolvableType.YANG_USES) { | 596 | } else if (type == ResolvableType.YANG_USES) { |
| 591 | return usesResolutionList; | 597 | return usesResolutionList; |
| 592 | - } else { | 598 | + } else if (type == ResolvableType.YANG_IF_FEATURE) { |
| 593 | return ifFeatureResolutionList; | 599 | return ifFeatureResolutionList; |
| 600 | + } else { | ||
| 601 | + return leafrefResolutionList; | ||
| 594 | } | 602 | } |
| 595 | } | 603 | } |
| 596 | 604 | ||
| ... | @@ -603,6 +611,8 @@ public class YangModule | ... | @@ -603,6 +611,8 @@ public class YangModule |
| 603 | usesResolutionList.add(resolutionInfo); | 611 | usesResolutionList.add(resolutionInfo); |
| 604 | } else if (type == ResolvableType.YANG_IF_FEATURE) { | 612 | } else if (type == ResolvableType.YANG_IF_FEATURE) { |
| 605 | ifFeatureResolutionList.add(resolutionInfo); | 613 | ifFeatureResolutionList.add(resolutionInfo); |
| 614 | + } else { | ||
| 615 | + leafrefResolutionList.add(resolutionInfo); | ||
| 606 | } | 616 | } |
| 607 | } | 617 | } |
| 608 | 618 | ||
| ... | @@ -615,6 +625,8 @@ public class YangModule | ... | @@ -615,6 +625,8 @@ public class YangModule |
| 615 | usesResolutionList = resolutionList; | 625 | usesResolutionList = resolutionList; |
| 616 | } else if (type == ResolvableType.YANG_IF_FEATURE) { | 626 | } else if (type == ResolvableType.YANG_IF_FEATURE) { |
| 617 | ifFeatureResolutionList.add((YangResolutionInfo) resolutionList); | 627 | ifFeatureResolutionList.add((YangResolutionInfo) resolutionList); |
| 628 | + } else if (type == ResolvableType.YANG_LEAFREF) { | ||
| 629 | + leafrefResolutionList = resolutionList; | ||
| 618 | } | 630 | } |
| 619 | 631 | ||
| 620 | } | 632 | } | ... | ... |
| ... | @@ -209,6 +209,11 @@ public class YangSubModule | ... | @@ -209,6 +209,11 @@ public class YangSubModule |
| 209 | private List<YangResolutionInfo> ifFeatureResolutionList; | 209 | private List<YangResolutionInfo> ifFeatureResolutionList; |
| 210 | 210 | ||
| 211 | /** | 211 | /** |
| 212 | + * leafref resolution list. | ||
| 213 | + */ | ||
| 214 | + private List<YangResolutionInfo> leafrefResolutionList; | ||
| 215 | + | ||
| 216 | + /** | ||
| 212 | * Creates a sub module node. | 217 | * Creates a sub module node. |
| 213 | */ | 218 | */ |
| 214 | public YangSubModule() { | 219 | public YangSubModule() { |
| ... | @@ -216,6 +221,7 @@ public class YangSubModule | ... | @@ -216,6 +221,7 @@ public class YangSubModule |
| 216 | derivedTypeResolutionList = new LinkedList<>(); | 221 | derivedTypeResolutionList = new LinkedList<>(); |
| 217 | usesResolutionList = new LinkedList<>(); | 222 | usesResolutionList = new LinkedList<>(); |
| 218 | ifFeatureResolutionList = new LinkedList<>(); | 223 | ifFeatureResolutionList = new LinkedList<>(); |
| 224 | + leafrefResolutionList = new LinkedList<>(); | ||
| 219 | importList = new LinkedList<YangImport>(); | 225 | importList = new LinkedList<YangImport>(); |
| 220 | includeList = new LinkedList<YangInclude>(); | 226 | includeList = new LinkedList<YangInclude>(); |
| 221 | listOfLeaf = new LinkedList<YangLeaf>(); | 227 | listOfLeaf = new LinkedList<YangLeaf>(); |
| ... | @@ -551,8 +557,10 @@ public class YangSubModule | ... | @@ -551,8 +557,10 @@ public class YangSubModule |
| 551 | return derivedTypeResolutionList; | 557 | return derivedTypeResolutionList; |
| 552 | } else if (type == ResolvableType.YANG_USES) { | 558 | } else if (type == ResolvableType.YANG_USES) { |
| 553 | return usesResolutionList; | 559 | return usesResolutionList; |
| 554 | - } else { | 560 | + } else if (type == ResolvableType.YANG_IF_FEATURE) { |
| 555 | return ifFeatureResolutionList; | 561 | return ifFeatureResolutionList; |
| 562 | + } else { | ||
| 563 | + return leafrefResolutionList; | ||
| 556 | } | 564 | } |
| 557 | } | 565 | } |
| 558 | 566 | ||
| ... | @@ -565,6 +573,8 @@ public class YangSubModule | ... | @@ -565,6 +573,8 @@ public class YangSubModule |
| 565 | usesResolutionList.add(resolutionInfo); | 573 | usesResolutionList.add(resolutionInfo); |
| 566 | } else if (type == ResolvableType.YANG_IF_FEATURE) { | 574 | } else if (type == ResolvableType.YANG_IF_FEATURE) { |
| 567 | ifFeatureResolutionList.add(resolutionInfo); | 575 | ifFeatureResolutionList.add(resolutionInfo); |
| 576 | + } else { | ||
| 577 | + leafrefResolutionList.add(resolutionInfo); | ||
| 568 | } | 578 | } |
| 569 | } | 579 | } |
| 570 | 580 | ||
| ... | @@ -576,7 +586,9 @@ public class YangSubModule | ... | @@ -576,7 +586,9 @@ public class YangSubModule |
| 576 | } else if (type == ResolvableType.YANG_USES) { | 586 | } else if (type == ResolvableType.YANG_USES) { |
| 577 | usesResolutionList = resolutionList; | 587 | usesResolutionList = resolutionList; |
| 578 | } else if (type == ResolvableType.YANG_IF_FEATURE) { | 588 | } else if (type == ResolvableType.YANG_IF_FEATURE) { |
| 579 | - ifFeatureResolutionList = resolutionList; | 589 | + ifFeatureResolutionList.add((YangResolutionInfo) resolutionList); |
| 590 | + } else if (type == ResolvableType.YANG_LEAFREF) { | ||
| 591 | + leafrefResolutionList = resolutionList; | ||
| 580 | } | 592 | } |
| 581 | 593 | ||
| 582 | } | 594 | } | ... | ... |
| ... | @@ -17,6 +17,7 @@ | ... | @@ -17,6 +17,7 @@ |
| 17 | package org.onosproject.yangutils.datamodel; | 17 | package org.onosproject.yangutils.datamodel; |
| 18 | 18 | ||
| 19 | import java.io.Serializable; | 19 | import java.io.Serializable; |
| 20 | + | ||
| 20 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 21 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; |
| 21 | import org.onosproject.yangutils.datamodel.utils.Parsable; | 22 | import org.onosproject.yangutils.datamodel.utils.Parsable; |
| 22 | import org.onosproject.yangutils.datamodel.utils.ResolvableStatus; | 23 | import org.onosproject.yangutils.datamodel.utils.ResolvableStatus; |
| ... | @@ -43,7 +44,7 @@ import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangData | ... | @@ -43,7 +44,7 @@ import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangData |
| 43 | * | bit | 9.7.4 | 0..n | - YangBit used in YangBits | | 44 | * | bit | 9.7.4 | 0..n | - YangBit used in YangBits | |
| 44 | * | enum | 9.6.4 | 0..n | - YangEnum used in YangEnumeration | | 45 | * | enum | 9.6.4 | 0..n | - YangEnum used in YangEnumeration | |
| 45 | * | length | 9.4.4 | 0..1 | - used for string | | 46 | * | length | 9.4.4 | 0..1 | - used for string | |
| 46 | - * | path | 9.9.2 | 0..1 | - TODO leaf-ref | | 47 | + * | path | 9.9.2 | 0..1 | - path for referred leaf/leaf-list | |
| 47 | * | pattern | 9.4.6 | 0..n | - used for string | | 48 | * | pattern | 9.4.6 | 0..n | - used for string | |
| 48 | * | range | 9.2.4 | 0..1 | - used for integer data type | | 49 | * | range | 9.2.4 | 0..1 | - used for integer data type | |
| 49 | * | require-instance | 9.13.2 | 0..1 | - TODO instance-identifier | | 50 | * | require-instance | 9.13.2 | 0..1 | - TODO instance-identifier | |
| ... | @@ -67,11 +68,6 @@ public class YangType<T> | ... | @@ -67,11 +68,6 @@ public class YangType<T> |
| 67 | private YangNodeIdentifier nodeIdentifier; | 68 | private YangNodeIdentifier nodeIdentifier; |
| 68 | 69 | ||
| 69 | /** | 70 | /** |
| 70 | - * Java package in which the Java type is defined. | ||
| 71 | - */ | ||
| 72 | - private String javaPackage; | ||
| 73 | - | ||
| 74 | - /** | ||
| 75 | * YANG data type. | 71 | * YANG data type. |
| 76 | */ | 72 | */ |
| 77 | private YangDataTypes dataType; | 73 | private YangDataTypes dataType; |
| ... | @@ -137,24 +133,6 @@ public class YangType<T> | ... | @@ -137,24 +133,6 @@ public class YangType<T> |
| 137 | } | 133 | } |
| 138 | 134 | ||
| 139 | /** | 135 | /** |
| 140 | - * Returns the Java package where the type is defined. | ||
| 141 | - * | ||
| 142 | - * @return Java package where the type is defined | ||
| 143 | - */ | ||
| 144 | - public String getJavaPackage() { | ||
| 145 | - return javaPackage; | ||
| 146 | - } | ||
| 147 | - | ||
| 148 | - /** | ||
| 149 | - * Sets Java package where the type is defined. | ||
| 150 | - * | ||
| 151 | - * @param javaPackage Java package where the type is defined | ||
| 152 | - */ | ||
| 153 | - public void setJavaPackage(String javaPackage) { | ||
| 154 | - this.javaPackage = javaPackage; | ||
| 155 | - } | ||
| 156 | - | ||
| 157 | - /** | ||
| 158 | * Returns the type of data. | 136 | * Returns the type of data. |
| 159 | * | 137 | * |
| 160 | * @return the data type | 138 | * @return the data type |
| ... | @@ -209,6 +187,16 @@ public class YangType<T> | ... | @@ -209,6 +187,16 @@ public class YangType<T> |
| 209 | } | 187 | } |
| 210 | 188 | ||
| 211 | /** | 189 | /** |
| 190 | + * Resets the class attributes to its default value. | ||
| 191 | + */ | ||
| 192 | + public void resetYangType() { | ||
| 193 | + nodeIdentifier = new YangNodeIdentifier(); | ||
| 194 | + resolvableStatus = ResolvableStatus.UNRESOLVED; | ||
| 195 | + dataType = null; | ||
| 196 | + dataTypeExtendedInfo = null; | ||
| 197 | + } | ||
| 198 | + | ||
| 199 | + /** | ||
| 212 | * Returns the type of the parsed data. | 200 | * Returns the type of the parsed data. |
| 213 | * | 201 | * |
| 214 | * @return returns TYPE_DATA | 202 | * @return returns TYPE_DATA | ... | ... |
| ... | @@ -24,6 +24,7 @@ import org.onosproject.yangutils.datamodel.ResolvableType; | ... | @@ -24,6 +24,7 @@ import org.onosproject.yangutils.datamodel.ResolvableType; |
| 24 | import org.onosproject.yangutils.datamodel.YangIfFeature; | 24 | import org.onosproject.yangutils.datamodel.YangIfFeature; |
| 25 | import org.onosproject.yangutils.datamodel.YangLeaf; | 25 | import org.onosproject.yangutils.datamodel.YangLeaf; |
| 26 | import org.onosproject.yangutils.datamodel.YangLeafList; | 26 | import org.onosproject.yangutils.datamodel.YangLeafList; |
| 27 | +import org.onosproject.yangutils.datamodel.YangLeafRef; | ||
| 27 | import org.onosproject.yangutils.datamodel.YangLeavesHolder; | 28 | import org.onosproject.yangutils.datamodel.YangLeavesHolder; |
| 28 | import org.onosproject.yangutils.datamodel.YangNode; | 29 | import org.onosproject.yangutils.datamodel.YangNode; |
| 29 | import org.onosproject.yangutils.datamodel.YangReferenceResolver; | 30 | import org.onosproject.yangutils.datamodel.YangReferenceResolver; |
| ... | @@ -171,6 +172,10 @@ public final class DataModelUtils { | ... | @@ -171,6 +172,10 @@ public final class DataModelUtils { |
| 171 | .getEntityToResolve() instanceof YangIfFeature) { | 172 | .getEntityToResolve() instanceof YangIfFeature) { |
| 172 | resolutionNode.addToResolutionList(resolutionInfo, | 173 | resolutionNode.addToResolutionList(resolutionInfo, |
| 173 | ResolvableType.YANG_IF_FEATURE); | 174 | ResolvableType.YANG_IF_FEATURE); |
| 175 | + } else if (resolutionInfo.getEntityToResolveInfo() | ||
| 176 | + .getEntityToResolve() instanceof YangLeafRef) { | ||
| 177 | + resolutionNode.addToResolutionList(resolutionInfo, | ||
| 178 | + ResolvableType.YANG_LEAFREF); | ||
| 174 | } | 179 | } |
| 175 | } | 180 | } |
| 176 | 181 | ... | ... |
| ... | @@ -25,14 +25,14 @@ public enum YangDataTypes { | ... | @@ -25,14 +25,14 @@ public enum YangDataTypes { |
| 25 | * | 25 | * |
| 26 | * int8 represents integer values between -128 and 127, inclusively. | 26 | * int8 represents integer values between -128 and 127, inclusively. |
| 27 | */ | 27 | */ |
| 28 | - INT8, | 28 | + INT8("int8"), |
| 29 | 29 | ||
| 30 | /** | 30 | /** |
| 31 | * Reference:RFC 6020. | 31 | * Reference:RFC 6020. |
| 32 | * | 32 | * |
| 33 | * int16 represents integer values between -32768 and 32767, inclusively. | 33 | * int16 represents integer values between -32768 and 32767, inclusively. |
| 34 | */ | 34 | */ |
| 35 | - INT16, | 35 | + INT16("int16"), |
| 36 | 36 | ||
| 37 | /** | 37 | /** |
| 38 | * Reference:RFC 6020. | 38 | * Reference:RFC 6020. |
| ... | @@ -40,7 +40,7 @@ public enum YangDataTypes { | ... | @@ -40,7 +40,7 @@ public enum YangDataTypes { |
| 40 | * int32 represents integer values between -2147483648 and 2147483647, | 40 | * int32 represents integer values between -2147483648 and 2147483647, |
| 41 | * inclusively. | 41 | * inclusively. |
| 42 | */ | 42 | */ |
| 43 | - INT32, | 43 | + INT32("int32"), |
| 44 | 44 | ||
| 45 | /** | 45 | /** |
| 46 | * Reference:RFC 6020. | 46 | * Reference:RFC 6020. |
| ... | @@ -48,28 +48,28 @@ public enum YangDataTypes { | ... | @@ -48,28 +48,28 @@ public enum YangDataTypes { |
| 48 | * int64 represents integer values between -9223372036854775808 and | 48 | * int64 represents integer values between -9223372036854775808 and |
| 49 | * 9223372036854775807, inclusively. | 49 | * 9223372036854775807, inclusively. |
| 50 | */ | 50 | */ |
| 51 | - INT64, | 51 | + INT64("int64"), |
| 52 | 52 | ||
| 53 | /** | 53 | /** |
| 54 | * Reference:RFC 6020. | 54 | * Reference:RFC 6020. |
| 55 | * | 55 | * |
| 56 | * uint8 represents integer values between 0 and 255, inclusively. | 56 | * uint8 represents integer values between 0 and 255, inclusively. |
| 57 | */ | 57 | */ |
| 58 | - UINT8, | 58 | + UINT8("uint8"), |
| 59 | 59 | ||
| 60 | /** | 60 | /** |
| 61 | * Reference:RFC 6020. | 61 | * Reference:RFC 6020. |
| 62 | * | 62 | * |
| 63 | * uint16 represents integer values between 0 and 65535, inclusively. | 63 | * uint16 represents integer values between 0 and 65535, inclusively. |
| 64 | */ | 64 | */ |
| 65 | - UINT16, | 65 | + UINT16("uint16"), |
| 66 | 66 | ||
| 67 | /** | 67 | /** |
| 68 | * Reference:RFC 6020. | 68 | * Reference:RFC 6020. |
| 69 | * | 69 | * |
| 70 | * uint32 represents integer values between 0 and 4294967295, inclusively. | 70 | * uint32 represents integer values between 0 and 4294967295, inclusively. |
| 71 | */ | 71 | */ |
| 72 | - UINT32, | 72 | + UINT32("uint32"), |
| 73 | 73 | ||
| 74 | /** | 74 | /** |
| 75 | * Reference:RFC 6020. | 75 | * Reference:RFC 6020. |
| ... | @@ -77,7 +77,7 @@ public enum YangDataTypes { | ... | @@ -77,7 +77,7 @@ public enum YangDataTypes { |
| 77 | * uint64 represents integer values between 0 and 18446744073709551615, | 77 | * uint64 represents integer values between 0 and 18446744073709551615, |
| 78 | * inclusively. | 78 | * inclusively. |
| 79 | */ | 79 | */ |
| 80 | - UINT64, | 80 | + UINT64("uint64"), |
| 81 | 81 | ||
| 82 | /** | 82 | /** |
| 83 | * Reference:RFC 6020. | 83 | * Reference:RFC 6020. |
| ... | @@ -88,7 +88,7 @@ public enum YangDataTypes { | ... | @@ -88,7 +88,7 @@ public enum YangDataTypes { |
| 88 | * a negative power of ten, i.e., expressible as "i x 10^-n" where i is an | 88 | * a negative power of ten, i.e., expressible as "i x 10^-n" where i is an |
| 89 | * integer64 and n is an integer between 1 and 18, inclusively. | 89 | * integer64 and n is an integer between 1 and 18, inclusively. |
| 90 | */ | 90 | */ |
| 91 | - DECIMAL64, // TODO: need to implement in type. | 91 | + DECIMAL64("decimal64"), // TODO: need to implement in type. |
| 92 | 92 | ||
| 93 | /** | 93 | /** |
| 94 | * Reference:RFC 6020. | 94 | * Reference:RFC 6020. |
| ... | @@ -97,14 +97,14 @@ public enum YangDataTypes { | ... | @@ -97,14 +97,14 @@ public enum YangDataTypes { |
| 97 | * characters are tab, carriage return, line feed, and the legal characters | 97 | * characters are tab, carriage return, line feed, and the legal characters |
| 98 | * of Unicode and ISO/IEC 10646 | 98 | * of Unicode and ISO/IEC 10646 |
| 99 | */ | 99 | */ |
| 100 | - STRING, | 100 | + STRING("string"), |
| 101 | 101 | ||
| 102 | /** | 102 | /** |
| 103 | * Reference:RFC 6020. | 103 | * Reference:RFC 6020. |
| 104 | * | 104 | * |
| 105 | * The boolean built-in type represents a boolean value. | 105 | * The boolean built-in type represents a boolean value. |
| 106 | */ | 106 | */ |
| 107 | - BOOLEAN, | 107 | + BOOLEAN("boolean"), |
| 108 | 108 | ||
| 109 | /** | 109 | /** |
| 110 | * Reference:RFC 6020. | 110 | * Reference:RFC 6020. |
| ... | @@ -112,7 +112,7 @@ public enum YangDataTypes { | ... | @@ -112,7 +112,7 @@ public enum YangDataTypes { |
| 112 | * The enumeration built-in type represents values from a set of assigned | 112 | * The enumeration built-in type represents values from a set of assigned |
| 113 | * names. | 113 | * names. |
| 114 | */ | 114 | */ |
| 115 | - ENUMERATION, | 115 | + ENUMERATION("enumeration"), |
| 116 | 116 | ||
| 117 | /** | 117 | /** |
| 118 | * Reference:RFC 6020. | 118 | * Reference:RFC 6020. |
| ... | @@ -121,7 +121,7 @@ public enum YangDataTypes { | ... | @@ -121,7 +121,7 @@ public enum YangDataTypes { |
| 121 | * set of flags identified by small integer position numbers starting at 0. | 121 | * set of flags identified by small integer position numbers starting at 0. |
| 122 | * Each bit number has an assigned name. | 122 | * Each bit number has an assigned name. |
| 123 | */ | 123 | */ |
| 124 | - BITS, | 124 | + BITS("bits"), |
| 125 | 125 | ||
| 126 | /** | 126 | /** |
| 127 | * Reference:RFC 6020. | 127 | * Reference:RFC 6020. |
| ... | @@ -129,7 +129,7 @@ public enum YangDataTypes { | ... | @@ -129,7 +129,7 @@ public enum YangDataTypes { |
| 129 | * The binary built-in type represents any binary data, i.e., a sequence of | 129 | * The binary built-in type represents any binary data, i.e., a sequence of |
| 130 | * octets. | 130 | * octets. |
| 131 | */ | 131 | */ |
| 132 | - BINARY, | 132 | + BINARY("binary"), |
| 133 | 133 | ||
| 134 | /** | 134 | /** |
| 135 | * Reference:RFC 6020. | 135 | * Reference:RFC 6020. |
| ... | @@ -150,14 +150,14 @@ public enum YangDataTypes { | ... | @@ -150,14 +150,14 @@ public enum YangDataTypes { |
| 150 | * more features, then the leaf with the leafref type MUST also be | 150 | * more features, then the leaf with the leafref type MUST also be |
| 151 | * conditional based on at least the same set of features. | 151 | * conditional based on at least the same set of features. |
| 152 | */ | 152 | */ |
| 153 | - LEAFREF, // TODO: need to implement in type. | 153 | + LEAFREF("leafref"), |
| 154 | 154 | ||
| 155 | /** | 155 | /** |
| 156 | * Reference:RFC 6020. | 156 | * Reference:RFC 6020. |
| 157 | * | 157 | * |
| 158 | * The identityref type is used to reference an existing identity. | 158 | * The identityref type is used to reference an existing identity. |
| 159 | */ | 159 | */ |
| 160 | - IDENTITYREF, | 160 | + IDENTITYREF("identityref"), |
| 161 | 161 | ||
| 162 | /** | 162 | /** |
| 163 | * Reference:RFC 6020. | 163 | * Reference:RFC 6020. |
| ... | @@ -167,7 +167,7 @@ public enum YangDataTypes { | ... | @@ -167,7 +167,7 @@ public enum YangDataTypes { |
| 167 | * | 167 | * |
| 168 | * An empty type cannot have a default value. | 168 | * An empty type cannot have a default value. |
| 169 | */ | 169 | */ |
| 170 | - EMPTY, | 170 | + EMPTY("empty"), |
| 171 | 171 | ||
| 172 | /** | 172 | /** |
| 173 | * Reference:RFC 6020. | 173 | * Reference:RFC 6020. |
| ... | @@ -189,7 +189,7 @@ public enum YangDataTypes { | ... | @@ -189,7 +189,7 @@ public enum YangDataTypes { |
| 189 | * Any default value or "units" property defined in the member types is not | 189 | * Any default value or "units" property defined in the member types is not |
| 190 | * inherited by the union type. | 190 | * inherited by the union type. |
| 191 | */ | 191 | */ |
| 192 | - UNION, | 192 | + UNION("union"), |
| 193 | 193 | ||
| 194 | /** | 194 | /** |
| 195 | * Reference:RFC 6020. | 195 | * Reference:RFC 6020. |
| ... | @@ -212,12 +212,26 @@ public enum YangDataTypes { | ... | @@ -212,12 +212,26 @@ public enum YangDataTypes { |
| 212 | * valid data. All such leaf nodes MUST reference existing nodes or leaf | 212 | * valid data. All such leaf nodes MUST reference existing nodes or leaf |
| 213 | * nodes with their default value in use for the data to be valid. | 213 | * nodes with their default value in use for the data to be valid. |
| 214 | */ | 214 | */ |
| 215 | - INSTANCE_IDENTIFIER, | 215 | + INSTANCE_IDENTIFIER("instance-identifier"), |
| 216 | 216 | ||
| 217 | /** | 217 | /** |
| 218 | * Derived data type. | 218 | * Derived data type. |
| 219 | */ | 219 | */ |
| 220 | - DERIVED; | 220 | + DERIVED("derived"); |
| 221 | + | ||
| 222 | + /** | ||
| 223 | + * Defined type from the enum value. | ||
| 224 | + */ | ||
| 225 | + private String definedType; | ||
| 226 | + | ||
| 227 | + /** | ||
| 228 | + * Constructs type value from enum. | ||
| 229 | + * | ||
| 230 | + * @param definedType value of enum | ||
| 231 | + */ | ||
| 232 | + YangDataTypes(String definedType) { | ||
| 233 | + this.definedType = definedType; | ||
| 234 | + } | ||
| 221 | 235 | ||
| 222 | /** | 236 | /** |
| 223 | * Returns YANG data type for corresponding type name. | 237 | * Returns YANG data type for corresponding type name. |
| ... | @@ -228,7 +242,7 @@ public enum YangDataTypes { | ... | @@ -228,7 +242,7 @@ public enum YangDataTypes { |
| 228 | public static YangDataTypes getType(String name) { | 242 | public static YangDataTypes getType(String name) { |
| 229 | name = name.replace("\"", ""); | 243 | name = name.replace("\"", ""); |
| 230 | for (YangDataTypes yangDataType : values()) { | 244 | for (YangDataTypes yangDataType : values()) { |
| 231 | - if (yangDataType.name().toLowerCase().equals(name)) { | 245 | + if (yangDataType.definedType.toLowerCase().equals(name)) { |
| 232 | return yangDataType; | 246 | return yangDataType; |
| 233 | } | 247 | } |
| 234 | } | 248 | } | ... | ... |
| ... | @@ -161,6 +161,8 @@ public class YangLinkerManager | ... | @@ -161,6 +161,8 @@ public class YangLinkerManager |
| 161 | ((YangReferenceResolver) yangNode).resolveInterFileLinking(ResolvableType.YANG_USES); | 161 | ((YangReferenceResolver) yangNode).resolveInterFileLinking(ResolvableType.YANG_USES); |
| 162 | ((YangReferenceResolver) yangNode) | 162 | ((YangReferenceResolver) yangNode) |
| 163 | .resolveInterFileLinking(ResolvableType.YANG_DERIVED_DATA_TYPE); | 163 | .resolveInterFileLinking(ResolvableType.YANG_DERIVED_DATA_TYPE); |
| 164 | + ((YangReferenceResolver) yangNode) | ||
| 165 | + .resolveInterFileLinking(ResolvableType.YANG_LEAFREF); | ||
| 164 | } catch (DataModelException e) { | 166 | } catch (DataModelException e) { |
| 165 | String errorInfo = "Error in file: " + yangNode.getName() + " at line: " | 167 | String errorInfo = "Error in file: " + yangNode.getName() + " at line: " |
| 166 | + e.getLineNumber() + " at position: " + e.getCharPositionInLine() + NEW_LINE + e.getMessage(); | 168 | + e.getLineNumber() + " at position: " + e.getCharPositionInLine() + NEW_LINE + e.getMessage(); | ... | ... |
This diff is collapsed. Click to expand it.
| ... | @@ -16,7 +16,6 @@ | ... | @@ -16,7 +16,6 @@ |
| 16 | 16 | ||
| 17 | // Generated from GeneratedYang.g4 by ANTLR 4.5 | 17 | // Generated from GeneratedYang.g4 by ANTLR 4.5 |
| 18 | 18 | ||
| 19 | - | ||
| 20 | package org.onosproject.yangutils.parser.antlrgencode; | 19 | package org.onosproject.yangutils.parser.antlrgencode; |
| 21 | 20 | ||
| 22 | import org.antlr.v4.runtime.tree.ParseTreeListener; | 21 | import org.antlr.v4.runtime.tree.ParseTreeListener; |
| ... | @@ -1950,4 +1949,18 @@ public interface GeneratedYangListener extends ParseTreeListener { | ... | @@ -1950,4 +1949,18 @@ public interface GeneratedYangListener extends ParseTreeListener { |
| 1950 | */ | 1949 | */ |
| 1951 | void exitAnnotationIdentifier(GeneratedYangParser.AnnotationIdentifierContext | 1950 | void exitAnnotationIdentifier(GeneratedYangParser.AnnotationIdentifierContext |
| 1952 | currentContext); | 1951 | currentContext); |
| 1952 | + | ||
| 1953 | + /** | ||
| 1954 | + * Enters a parse tree produced by GeneratedYangParser for grammar rule require instance. | ||
| 1955 | + * | ||
| 1956 | + * @param currentContext current context in the parsed tree | ||
| 1957 | + */ | ||
| 1958 | + void enterRequireInstance(GeneratedYangParser.RequireInstanceContext currentContext); | ||
| 1959 | + | ||
| 1960 | + /** | ||
| 1961 | + * Exits a parse tree produced by GeneratedYangParser for grammar require instance. | ||
| 1962 | + * | ||
| 1963 | + * @param currentContext current context in the parsed tree | ||
| 1964 | + */ | ||
| 1965 | + void exitRequireInstance(GeneratedYangParser.RequireInstanceContext currentContext); | ||
| 1953 | } | 1966 | } | ... | ... |
| ... | @@ -49,6 +49,7 @@ import org.onosproject.yangutils.parser.impl.listeners.InputListener; | ... | @@ -49,6 +49,7 @@ import org.onosproject.yangutils.parser.impl.listeners.InputListener; |
| 49 | import org.onosproject.yangutils.parser.impl.listeners.KeyListener; | 49 | import org.onosproject.yangutils.parser.impl.listeners.KeyListener; |
| 50 | import org.onosproject.yangutils.parser.impl.listeners.LeafListListener; | 50 | import org.onosproject.yangutils.parser.impl.listeners.LeafListListener; |
| 51 | import org.onosproject.yangutils.parser.impl.listeners.LeafListener; | 51 | import org.onosproject.yangutils.parser.impl.listeners.LeafListener; |
| 52 | +import org.onosproject.yangutils.parser.impl.listeners.LeafrefListener; | ||
| 52 | import org.onosproject.yangutils.parser.impl.listeners.LengthRestrictionListener; | 53 | import org.onosproject.yangutils.parser.impl.listeners.LengthRestrictionListener; |
| 53 | import org.onosproject.yangutils.parser.impl.listeners.ListListener; | 54 | import org.onosproject.yangutils.parser.impl.listeners.ListListener; |
| 54 | import org.onosproject.yangutils.parser.impl.listeners.MandatoryListener; | 55 | import org.onosproject.yangutils.parser.impl.listeners.MandatoryListener; |
| ... | @@ -56,16 +57,18 @@ import org.onosproject.yangutils.parser.impl.listeners.MaxElementsListener; | ... | @@ -56,16 +57,18 @@ import org.onosproject.yangutils.parser.impl.listeners.MaxElementsListener; |
| 56 | import org.onosproject.yangutils.parser.impl.listeners.MinElementsListener; | 57 | import org.onosproject.yangutils.parser.impl.listeners.MinElementsListener; |
| 57 | import org.onosproject.yangutils.parser.impl.listeners.ModuleListener; | 58 | import org.onosproject.yangutils.parser.impl.listeners.ModuleListener; |
| 58 | import org.onosproject.yangutils.parser.impl.listeners.MustListener; | 59 | import org.onosproject.yangutils.parser.impl.listeners.MustListener; |
| 59 | -import org.onosproject.yangutils.parser.impl.listeners.NotificationListener; | ||
| 60 | import org.onosproject.yangutils.parser.impl.listeners.NamespaceListener; | 60 | import org.onosproject.yangutils.parser.impl.listeners.NamespaceListener; |
| 61 | +import org.onosproject.yangutils.parser.impl.listeners.NotificationListener; | ||
| 61 | import org.onosproject.yangutils.parser.impl.listeners.OrganizationListener; | 62 | import org.onosproject.yangutils.parser.impl.listeners.OrganizationListener; |
| 62 | import org.onosproject.yangutils.parser.impl.listeners.OutputListener; | 63 | import org.onosproject.yangutils.parser.impl.listeners.OutputListener; |
| 64 | +import org.onosproject.yangutils.parser.impl.listeners.PathListener; | ||
| 63 | import org.onosproject.yangutils.parser.impl.listeners.PatternRestrictionListener; | 65 | import org.onosproject.yangutils.parser.impl.listeners.PatternRestrictionListener; |
| 64 | import org.onosproject.yangutils.parser.impl.listeners.PositionListener; | 66 | import org.onosproject.yangutils.parser.impl.listeners.PositionListener; |
| 65 | import org.onosproject.yangutils.parser.impl.listeners.PrefixListener; | 67 | import org.onosproject.yangutils.parser.impl.listeners.PrefixListener; |
| 66 | import org.onosproject.yangutils.parser.impl.listeners.PresenceListener; | 68 | import org.onosproject.yangutils.parser.impl.listeners.PresenceListener; |
| 67 | import org.onosproject.yangutils.parser.impl.listeners.RangeRestrictionListener; | 69 | import org.onosproject.yangutils.parser.impl.listeners.RangeRestrictionListener; |
| 68 | import org.onosproject.yangutils.parser.impl.listeners.ReferenceListener; | 70 | import org.onosproject.yangutils.parser.impl.listeners.ReferenceListener; |
| 71 | +import org.onosproject.yangutils.parser.impl.listeners.RequireInstanceListener; | ||
| 69 | import org.onosproject.yangutils.parser.impl.listeners.RevisionDateListener; | 72 | import org.onosproject.yangutils.parser.impl.listeners.RevisionDateListener; |
| 70 | import org.onosproject.yangutils.parser.impl.listeners.RevisionListener; | 73 | import org.onosproject.yangutils.parser.impl.listeners.RevisionListener; |
| 71 | import org.onosproject.yangutils.parser.impl.listeners.RpcListener; | 74 | import org.onosproject.yangutils.parser.impl.listeners.RpcListener; |
| ... | @@ -81,9 +84,9 @@ import org.onosproject.yangutils.parser.impl.listeners.ValueListener; | ... | @@ -81,9 +84,9 @@ import org.onosproject.yangutils.parser.impl.listeners.ValueListener; |
| 81 | import org.onosproject.yangutils.parser.impl.listeners.VersionListener; | 84 | import org.onosproject.yangutils.parser.impl.listeners.VersionListener; |
| 82 | import org.onosproject.yangutils.parser.impl.listeners.WhenListener; | 85 | import org.onosproject.yangutils.parser.impl.listeners.WhenListener; |
| 83 | 86 | ||
| 84 | -import static org.onosproject.yangutils.utils.UtilConstants.UNSUPPORTED_YANG_CONSTRUCT; | ||
| 85 | -import static org.onosproject.yangutils.utils.UtilConstants.CURRENTLY_UNSUPPORTED; | ||
| 86 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.handleUnsupportedYangConstruct; | 87 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.handleUnsupportedYangConstruct; |
| 88 | +import static org.onosproject.yangutils.utils.UtilConstants.CURRENTLY_UNSUPPORTED; | ||
| 89 | +import static org.onosproject.yangutils.utils.UtilConstants.UNSUPPORTED_YANG_CONSTRUCT; | ||
| 87 | 90 | ||
| 88 | /** | 91 | /** |
| 89 | * Represents ANTLR generates parse-tree. ANTLR generates a parse-tree listener interface that responds to events | 92 | * Represents ANTLR generates parse-tree. ANTLR generates a parse-tree listener interface that responds to events |
| ... | @@ -667,17 +670,17 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -667,17 +670,17 @@ public class TreeWalkListener implements GeneratedYangListener { |
| 667 | 670 | ||
| 668 | @Override | 671 | @Override |
| 669 | public void enterLeafrefSpecification(GeneratedYangParser.LeafrefSpecificationContext ctx) { | 672 | public void enterLeafrefSpecification(GeneratedYangParser.LeafrefSpecificationContext ctx) { |
| 670 | - // do nothing. | 673 | + LeafrefListener.processLeafrefEntry(this, ctx); |
| 671 | } | 674 | } |
| 672 | 675 | ||
| 673 | @Override | 676 | @Override |
| 674 | public void exitLeafrefSpecification(GeneratedYangParser.LeafrefSpecificationContext ctx) { | 677 | public void exitLeafrefSpecification(GeneratedYangParser.LeafrefSpecificationContext ctx) { |
| 675 | - // do nothing. | 678 | + LeafrefListener.processLeafrefExit(this, ctx); |
| 676 | } | 679 | } |
| 677 | 680 | ||
| 678 | @Override | 681 | @Override |
| 679 | public void enterPathStatement(GeneratedYangParser.PathStatementContext ctx) { | 682 | public void enterPathStatement(GeneratedYangParser.PathStatementContext ctx) { |
| 680 | - handleUnsupportedYangConstruct(YangConstructType.PATH_DATA, ctx, CURRENTLY_UNSUPPORTED); | 683 | + PathListener.processPathEntry(this, ctx); |
| 681 | } | 684 | } |
| 682 | 685 | ||
| 683 | @Override | 686 | @Override |
| ... | @@ -687,7 +690,7 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -687,7 +690,7 @@ public class TreeWalkListener implements GeneratedYangListener { |
| 687 | 690 | ||
| 688 | @Override | 691 | @Override |
| 689 | public void enterRequireInstanceStatement(GeneratedYangParser.RequireInstanceStatementContext ctx) { | 692 | public void enterRequireInstanceStatement(GeneratedYangParser.RequireInstanceStatementContext ctx) { |
| 690 | - handleUnsupportedYangConstruct(YangConstructType.REQUIRE_INSTANCE_DATA, ctx, UNSUPPORTED_YANG_CONSTRUCT); | 693 | + RequireInstanceListener.processRequireInstanceEntry(this, ctx); |
| 691 | } | 694 | } |
| 692 | 695 | ||
| 693 | @Override | 696 | @Override |
| ... | @@ -1489,6 +1492,16 @@ public class TreeWalkListener implements GeneratedYangListener { | ... | @@ -1489,6 +1492,16 @@ public class TreeWalkListener implements GeneratedYangListener { |
| 1489 | } | 1492 | } |
| 1490 | 1493 | ||
| 1491 | @Override | 1494 | @Override |
| 1495 | + public void enterRequireInstance(GeneratedYangParser.RequireInstanceContext ctx) { | ||
| 1496 | + // do nothing. | ||
| 1497 | + } | ||
| 1498 | + | ||
| 1499 | + @Override | ||
| 1500 | + public void exitRequireInstance(GeneratedYangParser.RequireInstanceContext ctx) { | ||
| 1501 | + // do nothing. | ||
| 1502 | + } | ||
| 1503 | + | ||
| 1504 | + @Override | ||
| 1492 | public void enterFraction(GeneratedYangParser.FractionContext ctx) { | 1505 | public void enterFraction(GeneratedYangParser.FractionContext ctx) { |
| 1493 | // TODO: implement the method. | 1506 | // TODO: implement the method. |
| 1494 | } | 1507 | } | ... | ... |
| 1 | +/* | ||
| 2 | + * Copyright 2016-present Open Networking Laboratory | ||
| 3 | + * | ||
| 4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| 5 | + * you may not use this file except in compliance with the License. | ||
| 6 | + * You may obtain a copy of the License at | ||
| 7 | + * | ||
| 8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
| 9 | + * | ||
| 10 | + * Unless required by applicable law or agreed to in writing, software | ||
| 11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
| 12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| 13 | + * See the License for the specific language governing permissions and | ||
| 14 | + * limitations under the License. | ||
| 15 | + */ | ||
| 16 | + | ||
| 17 | +package org.onosproject.yangutils.parser.impl.listeners; | ||
| 18 | + | ||
| 19 | +import org.onosproject.yangutils.datamodel.YangLeaf; | ||
| 20 | +import org.onosproject.yangutils.datamodel.YangLeafList; | ||
| 21 | +import org.onosproject.yangutils.datamodel.YangLeafRef; | ||
| 22 | +import org.onosproject.yangutils.datamodel.YangNode; | ||
| 23 | +import org.onosproject.yangutils.datamodel.YangType; | ||
| 24 | +import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | ||
| 25 | +import org.onosproject.yangutils.datamodel.utils.Parsable; | ||
| 26 | +import org.onosproject.yangutils.linker.impl.YangResolutionInfoImpl; | ||
| 27 | +import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; | ||
| 28 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
| 29 | +import org.onosproject.yangutils.parser.impl.TreeWalkListener; | ||
| 30 | + | ||
| 31 | +import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.addResolutionInfo; | ||
| 32 | +import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.UNRESOLVED; | ||
| 33 | +import static org.onosproject.yangutils.datamodel.utils.YangConstructType.LEAFREF_DATA; | ||
| 34 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; | ||
| 35 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT; | ||
| 36 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage; | ||
| 37 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage; | ||
| 38 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER; | ||
| 39 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER; | ||
| 40 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER; | ||
| 41 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA; | ||
| 42 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty; | ||
| 43 | + | ||
| 44 | +/* | ||
| 45 | + * Reference: RFC6020 and YANG ANTLR Grammar | ||
| 46 | + * | ||
| 47 | + * ABNF grammar as per RFC6020 | ||
| 48 | + * type-body-stmts = numerical-restrictions / | ||
| 49 | + * decimal64-specification / | ||
| 50 | + * string-restrictions / | ||
| 51 | + * enum-specification / | ||
| 52 | + * leafref-specification / | ||
| 53 | + * identityref-specification / | ||
| 54 | + * instance-identifier-specification / | ||
| 55 | + * bits-specification / | ||
| 56 | + * union-specification | ||
| 57 | + * | ||
| 58 | + * leafref-specification = | ||
| 59 | + * ;; these stmts can appear in any order | ||
| 60 | + * path-stmt stmtsep | ||
| 61 | + * [require-instance-stmt stmtsep] | ||
| 62 | + * | ||
| 63 | + * ANTLR grammar rule | ||
| 64 | + * | ||
| 65 | + * typeBodyStatements : numericalRestrictions | stringRestrictions | enumSpecification | ||
| 66 | + * | leafrefSpecification | identityrefSpecification | instanceIdentifierSpecification | ||
| 67 | + * | bitsSpecification | unionSpecification; | ||
| 68 | + * | ||
| 69 | + * leafrefSpecification : (pathStatement (requireInstanceStatement)?) | ((requireInstanceStatement)? pathStatement); | ||
| 70 | + */ | ||
| 71 | + | ||
| 72 | +/** | ||
| 73 | + * Represents listener based call back function corresponding to the | ||
| 74 | + * "leafref" rule defined in ANTLR grammar file for corresponding ABNF rule | ||
| 75 | + * in RFC 6020. | ||
| 76 | + */ | ||
| 77 | +public final class LeafrefListener { | ||
| 78 | + | ||
| 79 | + /** | ||
| 80 | + * Creates a new leafref listener. | ||
| 81 | + */ | ||
| 82 | + private LeafrefListener() { | ||
| 83 | + } | ||
| 84 | + | ||
| 85 | + /** | ||
| 86 | + * It is called when parser receives an input matching the grammar rule | ||
| 87 | + * (leafref), perform validations and updates the data model tree. | ||
| 88 | + * | ||
| 89 | + * @param listener listener's object | ||
| 90 | + * @param ctx context object of the grammar rule | ||
| 91 | + */ | ||
| 92 | + public static void processLeafrefEntry(TreeWalkListener listener, | ||
| 93 | + GeneratedYangParser.LeafrefSpecificationContext ctx) { | ||
| 94 | + | ||
| 95 | + // Check for stack to be non empty. | ||
| 96 | + checkStackIsNotEmpty(listener, MISSING_HOLDER, LEAFREF_DATA, "", ENTRY); | ||
| 97 | + | ||
| 98 | + int errorLine = ctx.getStart().getLine(); | ||
| 99 | + int errorPosition = ctx.getStart().getCharPositionInLine(); | ||
| 100 | + | ||
| 101 | + YangLeafRef<?> leafRef = new YangLeafRef<>(); | ||
| 102 | + | ||
| 103 | + Parsable typeData = listener.getParsedDataStack().pop(); | ||
| 104 | + | ||
| 105 | + if (!(typeData instanceof YangType)) { | ||
| 106 | + throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LEAFREF_DATA, | ||
| 107 | + "", ENTRY)); | ||
| 108 | + } | ||
| 109 | + | ||
| 110 | + YangType type = (YangType) typeData; | ||
| 111 | + type.setDataTypeExtendedInfo(leafRef); | ||
| 112 | + | ||
| 113 | + // Setting by default the value of require-instance as true. | ||
| 114 | + leafRef.setRequireInstance(true); | ||
| 115 | + Parsable tmpData = listener.getParsedDataStack().peek(); | ||
| 116 | + | ||
| 117 | + switch (tmpData.getYangConstructType()) { | ||
| 118 | + | ||
| 119 | + case LEAF_DATA: | ||
| 120 | + | ||
| 121 | + // Parent YANG node of leaf to be added in resolution information. | ||
| 122 | + YangLeaf leaf = (YangLeaf) listener.getParsedDataStack().pop(); | ||
| 123 | + Parsable parentNodeOfLeaf = listener.getParsedDataStack().peek(); | ||
| 124 | + listener.getParsedDataStack().push(leaf); | ||
| 125 | + | ||
| 126 | + // Verify parent node of leaf. | ||
| 127 | + if (!(parentNodeOfLeaf instanceof YangNode)) { | ||
| 128 | + throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LEAFREF_DATA, | ||
| 129 | + "", ENTRY)); | ||
| 130 | + } | ||
| 131 | + | ||
| 132 | + leafRef.setResolvableStatus(UNRESOLVED); | ||
| 133 | + | ||
| 134 | + // Add resolution information to the list. | ||
| 135 | + YangResolutionInfoImpl resolutionInfo = new YangResolutionInfoImpl<YangLeafRef>(leafRef, | ||
| 136 | + (YangNode) parentNodeOfLeaf, errorLine, errorPosition); | ||
| 137 | + addToResolutionList(resolutionInfo); | ||
| 138 | + break; | ||
| 139 | + | ||
| 140 | + case LEAF_LIST_DATA: | ||
| 141 | + | ||
| 142 | + // Parent YANG node of leaf-list to be added in resolution information. | ||
| 143 | + YangLeafList leafList = (YangLeafList) listener.getParsedDataStack().pop(); | ||
| 144 | + Parsable parentNodeOfLeafList = listener.getParsedDataStack().peek(); | ||
| 145 | + listener.getParsedDataStack().push(leafList); | ||
| 146 | + | ||
| 147 | + // Verify parent node of leaf-list. | ||
| 148 | + if (!(parentNodeOfLeafList instanceof YangNode)) { | ||
| 149 | + throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LEAFREF_DATA, | ||
| 150 | + "", ENTRY)); | ||
| 151 | + } | ||
| 152 | + | ||
| 153 | + leafRef.setResolvableStatus(UNRESOLVED); | ||
| 154 | + | ||
| 155 | + // Add resolution information to the list. | ||
| 156 | + YangResolutionInfoImpl resolutionInfoImpl = new YangResolutionInfoImpl<YangLeafRef>(leafRef, | ||
| 157 | + (YangNode) parentNodeOfLeafList, errorLine, errorPosition); | ||
| 158 | + addToResolutionList(resolutionInfoImpl); | ||
| 159 | + break; | ||
| 160 | + | ||
| 161 | + case TYPEDEF_DATA: | ||
| 162 | + /* | ||
| 163 | + * Do not add the leaf ref to resolution list. It needs to be | ||
| 164 | + * added to resolution list, when leaf/leaf list references to | ||
| 165 | + * this typedef. At this time that leaf/leaf-list becomes the | ||
| 166 | + * parent for the leafref. | ||
| 167 | + */ | ||
| 168 | + break; | ||
| 169 | + | ||
| 170 | + default: | ||
| 171 | + throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LEAFREF_DATA, | ||
| 172 | + "", ENTRY)); | ||
| 173 | + } | ||
| 174 | + listener.getParsedDataStack().push(typeData); | ||
| 175 | + listener.getParsedDataStack().push(leafRef); | ||
| 176 | + } | ||
| 177 | + | ||
| 178 | + /** | ||
| 179 | + * It is called when parser exits from grammar rule (leafref), it performs | ||
| 180 | + * validation and updates the data model tree. | ||
| 181 | + * | ||
| 182 | + * @param listener listener's object | ||
| 183 | + * @param ctx context object of the grammar rule | ||
| 184 | + */ | ||
| 185 | + public static void processLeafrefExit(TreeWalkListener listener, | ||
| 186 | + GeneratedYangParser.LeafrefSpecificationContext ctx) { | ||
| 187 | + | ||
| 188 | + // Check for stack to be non empty. | ||
| 189 | + checkStackIsNotEmpty(listener, MISSING_CURRENT_HOLDER, LEAFREF_DATA, "", EXIT); | ||
| 190 | + | ||
| 191 | + Parsable parsableType = listener.getParsedDataStack().pop(); | ||
| 192 | + if (!(parsableType instanceof YangLeafRef)) { | ||
| 193 | + throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LEAFREF_DATA, | ||
| 194 | + "", EXIT)); | ||
| 195 | + } | ||
| 196 | + } | ||
| 197 | + | ||
| 198 | + /** | ||
| 199 | + * Adds to resolution list. | ||
| 200 | + * | ||
| 201 | + * @param resolutionInfo resolution information | ||
| 202 | + */ | ||
| 203 | + private static void addToResolutionList(YangResolutionInfoImpl resolutionInfo) { | ||
| 204 | + | ||
| 205 | + try { | ||
| 206 | + addResolutionInfo(resolutionInfo); | ||
| 207 | + } catch (DataModelException e) { | ||
| 208 | + throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA, | ||
| 209 | + LEAFREF_DATA, "", ENTRY, e.getMessage())); | ||
| 210 | + } | ||
| 211 | + } | ||
| 212 | +} |
| ... | @@ -128,6 +128,8 @@ public final class ModuleListener { | ... | @@ -128,6 +128,8 @@ public final class ModuleListener { |
| 128 | .peek()).resolveSelfFileLinking(ResolvableType.YANG_USES); | 128 | .peek()).resolveSelfFileLinking(ResolvableType.YANG_USES); |
| 129 | ((YangReferenceResolver) listener.getParsedDataStack() | 129 | ((YangReferenceResolver) listener.getParsedDataStack() |
| 130 | .peek()).resolveSelfFileLinking(ResolvableType.YANG_DERIVED_DATA_TYPE); | 130 | .peek()).resolveSelfFileLinking(ResolvableType.YANG_DERIVED_DATA_TYPE); |
| 131 | + ((YangReferenceResolver) listener.getParsedDataStack() | ||
| 132 | + .peek()).resolveSelfFileLinking(ResolvableType.YANG_LEAFREF); | ||
| 131 | } catch (DataModelException e) { | 133 | } catch (DataModelException e) { |
| 132 | LinkerException linkerException = new LinkerException(e.getMessage()); | 134 | LinkerException linkerException = new LinkerException(e.getMessage()); |
| 133 | linkerException.setLine(e.getLineNumber()); | 135 | linkerException.setLine(e.getLineNumber()); | ... | ... |
| 1 | +/* | ||
| 2 | + * Copyright 2016-present Open Networking Laboratory | ||
| 3 | + * | ||
| 4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| 5 | + * you may not use this file except in compliance with the License. | ||
| 6 | + * You may obtain a copy of the License at | ||
| 7 | + * | ||
| 8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
| 9 | + * | ||
| 10 | + * Unless required by applicable law or agreed to in writing, software | ||
| 11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
| 12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| 13 | + * See the License for the specific language governing permissions and | ||
| 14 | + * limitations under the License. | ||
| 15 | + */ | ||
| 16 | + | ||
| 17 | +package org.onosproject.yangutils.parser.impl.listeners; | ||
| 18 | + | ||
| 19 | +import org.onosproject.yangutils.datamodel.YangLeafRef; | ||
| 20 | +import org.onosproject.yangutils.datamodel.utils.Parsable; | ||
| 21 | +import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; | ||
| 22 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
| 23 | +import org.onosproject.yangutils.parser.impl.TreeWalkListener; | ||
| 24 | + | ||
| 25 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage; | ||
| 26 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.validatePathArgument; | ||
| 27 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty; | ||
| 28 | +import static org.onosproject.yangutils.datamodel.utils.YangConstructType.PATH_DATA; | ||
| 29 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER; | ||
| 30 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; | ||
| 31 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER; | ||
| 32 | + | ||
| 33 | +/* | ||
| 34 | + * Reference: RFC6020 and YANG ANTLR Grammar | ||
| 35 | + * | ||
| 36 | + * ABNF grammar as per RFC6020 | ||
| 37 | + * leafref-specification = | ||
| 38 | + * ;; these stmts can appear in any order | ||
| 39 | + * path-stmt stmtsep | ||
| 40 | + * [require-instance-stmt stmtsep] | ||
| 41 | + * | ||
| 42 | + * path-stmt = path-keyword sep path-arg-str stmtend | ||
| 43 | + * | ||
| 44 | + * ANTLR grammar rule | ||
| 45 | + * | ||
| 46 | + * leafrefSpecification : (pathStatement (requireInstanceStatement)?) | ((requireInstanceStatement)? pathStatement); | ||
| 47 | + * | ||
| 48 | + * pathStatement : PATH_KEYWORD path STMTEND; | ||
| 49 | + */ | ||
| 50 | + | ||
| 51 | +/** | ||
| 52 | + * Represents listener based call back function corresponding to the | ||
| 53 | + * "path" rule defined in ANTLR grammar file for corresponding ABNF rule | ||
| 54 | + * in RFC 6020. | ||
| 55 | + */ | ||
| 56 | +public final class PathListener { | ||
| 57 | + | ||
| 58 | + /** | ||
| 59 | + * Creates a new path listener. | ||
| 60 | + */ | ||
| 61 | + private PathListener() { | ||
| 62 | + } | ||
| 63 | + | ||
| 64 | + /** | ||
| 65 | + * It is called when parser receives an input matching the grammar rule | ||
| 66 | + * (path), performs validation and updates the data model tree. | ||
| 67 | + * | ||
| 68 | + * @param listener listener's object | ||
| 69 | + * @param ctx context object of the grammar rule | ||
| 70 | + */ | ||
| 71 | + public static void processPathEntry(TreeWalkListener listener, | ||
| 72 | + GeneratedYangParser.PathStatementContext ctx) { | ||
| 73 | + | ||
| 74 | + // Check for stack to be non empty. | ||
| 75 | + checkStackIsNotEmpty(listener, MISSING_HOLDER, PATH_DATA, ctx.path().getText(), ENTRY); | ||
| 76 | + | ||
| 77 | + Parsable curData = listener.getParsedDataStack().peek(); | ||
| 78 | + | ||
| 79 | + // Checks the holder of path as leafref, else throws error. | ||
| 80 | + if (curData instanceof YangLeafRef) { | ||
| 81 | + | ||
| 82 | + // Splitting the path argument and updating it in the datamodel tree. | ||
| 83 | + validatePathArgument(ctx.path().getText(), PATH_DATA, ctx, (YangLeafRef) curData); | ||
| 84 | + } else { | ||
| 85 | + throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, PATH_DATA, | ||
| 86 | + ctx.path().getText(), ENTRY)); | ||
| 87 | + } | ||
| 88 | + } | ||
| 89 | +} |
| 1 | +/* | ||
| 2 | + * Copyright 2016-present Open Networking Laboratory | ||
| 3 | + * | ||
| 4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| 5 | + * you may not use this file except in compliance with the License. | ||
| 6 | + * You may obtain a copy of the License at | ||
| 7 | + * | ||
| 8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
| 9 | + * | ||
| 10 | + * Unless required by applicable law or agreed to in writing, software | ||
| 11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
| 12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| 13 | + * See the License for the specific language governing permissions and | ||
| 14 | + * limitations under the License. | ||
| 15 | + */ | ||
| 16 | + | ||
| 17 | +package org.onosproject.yangutils.parser.impl.listeners; | ||
| 18 | + | ||
| 19 | +import org.onosproject.yangutils.datamodel.YangLeafRef; | ||
| 20 | +import org.onosproject.yangutils.datamodel.YangType; | ||
| 21 | +import org.onosproject.yangutils.datamodel.utils.Parsable; | ||
| 22 | +import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes; | ||
| 23 | +import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; | ||
| 24 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
| 25 | +import org.onosproject.yangutils.parser.impl.TreeWalkListener; | ||
| 26 | + | ||
| 27 | +import static org.onosproject.yangutils.datamodel.utils.YangConstructType.REQUIRE_INSTANCE_DATA; | ||
| 28 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage; | ||
| 29 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidBooleanValue; | ||
| 30 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty; | ||
| 31 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER; | ||
| 32 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; | ||
| 33 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER; | ||
| 34 | + | ||
| 35 | +/* | ||
| 36 | + * Reference: RFC6020 and YANG ANTLR Grammar | ||
| 37 | + * | ||
| 38 | + * ABNF grammar as per RFC6020 | ||
| 39 | + * require-instance-stmt = require-instance-keyword sep | ||
| 40 | + * require-instance-arg-str stmtend | ||
| 41 | + * | ||
| 42 | + * require-instance-arg-str = < a string that matches the rule | ||
| 43 | + * require-instance-arg > | ||
| 44 | + * | ||
| 45 | + * require-instance-arg = true-keyword / false-keyword | ||
| 46 | + * | ||
| 47 | + * ANTLR grammar rule | ||
| 48 | + * | ||
| 49 | + * requireInstanceStatement : REQUIRE_INSTANCE_KEYWORD requireInstance STMTEND; | ||
| 50 | + * | ||
| 51 | + * requireInstance : string; | ||
| 52 | + */ | ||
| 53 | + | ||
| 54 | +/** | ||
| 55 | + * Represents listener based call back function corresponding to the | ||
| 56 | + * "require-instance" rule defined in ANTLR grammar file for corresponding ABNF rule | ||
| 57 | + * in RFC 6020. | ||
| 58 | + */ | ||
| 59 | +public final class RequireInstanceListener { | ||
| 60 | + | ||
| 61 | + /** | ||
| 62 | + * Creates a new require instance listener. | ||
| 63 | + */ | ||
| 64 | + private RequireInstanceListener() { | ||
| 65 | + } | ||
| 66 | + | ||
| 67 | + /** | ||
| 68 | + * It is called when parser receives an input matching the grammar rule | ||
| 69 | + * (require-instance), performs validation and updates the data model tree. | ||
| 70 | + * | ||
| 71 | + * @param listener listener's object | ||
| 72 | + * @param ctx context object of the grammar rule | ||
| 73 | + */ | ||
| 74 | + public static void processRequireInstanceEntry(TreeWalkListener listener, | ||
| 75 | + GeneratedYangParser.RequireInstanceStatementContext ctx) { | ||
| 76 | + | ||
| 77 | + // Check for stack to be non empty. | ||
| 78 | + checkStackIsNotEmpty(listener, MISSING_HOLDER, REQUIRE_INSTANCE_DATA, "", ENTRY); | ||
| 79 | + | ||
| 80 | + Parsable curData = listener.getParsedDataStack().peek(); | ||
| 81 | + | ||
| 82 | + // Gets the status of require instance | ||
| 83 | + boolean isRequireInstance = getValidBooleanValue(ctx.requireInstance().getText(), REQUIRE_INSTANCE_DATA, ctx); | ||
| 84 | + | ||
| 85 | + // Checks the holder of require-instance as leafref or type, else throws error. | ||
| 86 | + if (curData instanceof YangLeafRef) { | ||
| 87 | + | ||
| 88 | + // Sets the require-instance status to leafref. | ||
| 89 | + ((YangLeafRef) curData).setRequireInstance(isRequireInstance); | ||
| 90 | + } else if (curData instanceof YangType) { | ||
| 91 | + | ||
| 92 | + // Checks type should be instance-identifier, else throw error. | ||
| 93 | + if (((YangType) curData).getDataType() == YangDataTypes.INSTANCE_IDENTIFIER) { | ||
| 94 | + | ||
| 95 | + // Sets the require-instance status to instance-identifier type. | ||
| 96 | + ((YangType) curData).setDataTypeExtendedInfo(isRequireInstance); | ||
| 97 | + } else { | ||
| 98 | + throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, REQUIRE_INSTANCE_DATA, | ||
| 99 | + ctx.getText(), ENTRY)); | ||
| 100 | + } | ||
| 101 | + } else { | ||
| 102 | + throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, REQUIRE_INSTANCE_DATA, | ||
| 103 | + ctx.getText(), ENTRY)); | ||
| 104 | + } | ||
| 105 | + } | ||
| 106 | +} |
| ... | @@ -133,6 +133,8 @@ public final class SubModuleListener { | ... | @@ -133,6 +133,8 @@ public final class SubModuleListener { |
| 133 | .resolveSelfFileLinking(ResolvableType.YANG_USES); | 133 | .resolveSelfFileLinking(ResolvableType.YANG_USES); |
| 134 | ((YangReferenceResolver) listener.getParsedDataStack().peek()) | 134 | ((YangReferenceResolver) listener.getParsedDataStack().peek()) |
| 135 | .resolveSelfFileLinking(ResolvableType.YANG_DERIVED_DATA_TYPE); | 135 | .resolveSelfFileLinking(ResolvableType.YANG_DERIVED_DATA_TYPE); |
| 136 | + ((YangReferenceResolver) listener.getParsedDataStack().peek()) | ||
| 137 | + .resolveSelfFileLinking(ResolvableType.YANG_LEAFREF); | ||
| 136 | } catch (DataModelException e) { | 138 | } catch (DataModelException e) { |
| 137 | LinkerException linkerException = new LinkerException(e.getMessage()); | 139 | LinkerException linkerException = new LinkerException(e.getMessage()); |
| 138 | linkerException.setLine(e.getLineNumber()); | 140 | linkerException.setLine(e.getLineNumber()); | ... | ... |
| ... | @@ -101,6 +101,9 @@ public final class TypeListener { | ... | @@ -101,6 +101,9 @@ public final class TypeListener { |
| 101 | type.setNodeIdentifier(nodeIdentifier); | 101 | type.setNodeIdentifier(nodeIdentifier); |
| 102 | type.setDataType(yangDataTypes); | 102 | type.setDataType(yangDataTypes); |
| 103 | 103 | ||
| 104 | + // Set default require instance value as true for instance identifier. | ||
| 105 | + setDefaultRequireInstanceForInstanceIdentifier(type); | ||
| 106 | + | ||
| 104 | int errorLine = ctx.getStart().getLine(); | 107 | int errorLine = ctx.getStart().getLine(); |
| 105 | int errorPosition = ctx.getStart().getCharPositionInLine(); | 108 | int errorPosition = ctx.getStart().getCharPositionInLine(); |
| 106 | 109 | ||
| ... | @@ -233,6 +236,18 @@ public final class TypeListener { | ... | @@ -233,6 +236,18 @@ public final class TypeListener { |
| 233 | } | 236 | } |
| 234 | 237 | ||
| 235 | /** | 238 | /** |
| 239 | + * Sets the default require instance value as true when the type is instance identifier. | ||
| 240 | + * | ||
| 241 | + * @param type type to which the value has to be set | ||
| 242 | + */ | ||
| 243 | + private static void setDefaultRequireInstanceForInstanceIdentifier(YangType<?> type) { | ||
| 244 | + | ||
| 245 | + if (type.getDataType() == YangDataTypes.INSTANCE_IDENTIFIER) { | ||
| 246 | + ((YangType<Boolean>) type).setDataTypeExtendedInfo(true); | ||
| 247 | + } | ||
| 248 | + } | ||
| 249 | + | ||
| 250 | + /** | ||
| 236 | * It is called when parser exits from grammar rule (type), it perform | 251 | * It is called when parser exits from grammar rule (type), it perform |
| 237 | * validations and update the data model tree. | 252 | * validations and update the data model tree. |
| 238 | * | 253 | * |
| ... | @@ -291,7 +306,11 @@ public final class TypeListener { | ... | @@ -291,7 +306,11 @@ public final class TypeListener { |
| 291 | parserException = new ParserException("YANG file error : a type bits" + | 306 | parserException = new ParserException("YANG file error : a type bits" + |
| 292 | " must have atleast one bit statement."); | 307 | " must have atleast one bit statement."); |
| 293 | break; | 308 | break; |
| 294 | - // TODO : decimal64, identity ref, leafref | 309 | + case LEAFREF: |
| 310 | + parserException = new ParserException("YANG file error : a type leafref" + | ||
| 311 | + " must have one path statement."); | ||
| 312 | + break; | ||
| 313 | + // TODO : decimal64, identity ref | ||
| 295 | default: | 314 | default: |
| 296 | return; | 315 | return; |
| 297 | } | 316 | } | ... | ... |
This diff is collapsed. Click to expand it.
| ... | @@ -19,6 +19,8 @@ package org.onosproject.yangutils.translator.tojava; | ... | @@ -19,6 +19,8 @@ package org.onosproject.yangutils.translator.tojava; |
| 19 | import java.io.IOException; | 19 | import java.io.IOException; |
| 20 | 20 | ||
| 21 | import org.onosproject.yangutils.datamodel.YangNode; | 21 | import org.onosproject.yangutils.datamodel.YangNode; |
| 22 | +import org.onosproject.yangutils.datamodel.YangTypeDef; | ||
| 23 | +import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes; | ||
| 22 | import org.onosproject.yangutils.translator.exception.TranslatorException; | 24 | import org.onosproject.yangutils.translator.exception.TranslatorException; |
| 23 | import org.onosproject.yangutils.utils.io.impl.YangPluginConfig; | 25 | import org.onosproject.yangutils.utils.io.impl.YangPluginConfig; |
| 24 | 26 | ||
| ... | @@ -80,7 +82,20 @@ public final class JavaCodeGeneratorUtil { | ... | @@ -80,7 +82,20 @@ public final class JavaCodeGeneratorUtil { |
| 80 | if (!(codeGenNode instanceof JavaCodeGenerator)) { | 82 | if (!(codeGenNode instanceof JavaCodeGenerator)) { |
| 81 | throw new TranslatorException("Unsupported node to generate code"); | 83 | throw new TranslatorException("Unsupported node to generate code"); |
| 82 | } | 84 | } |
| 83 | - | 85 | + if (codeGenNode instanceof YangTypeDef) { |
| 86 | + YangTypeDef typeDef = (YangTypeDef) codeGenNode; | ||
| 87 | + if (typeDef.getTypeDefBaseType().getDataType() == YangDataTypes.LEAFREF | ||
| 88 | + || typeDef.getTypeDefBaseType().getDataType() == YangDataTypes.IDENTITYREF) { | ||
| 89 | + if (codeGenNode.getNextSibling() != null) { | ||
| 90 | + curTraversal = SIBILING; | ||
| 91 | + codeGenNode = codeGenNode.getNextSibling(); | ||
| 92 | + } else { | ||
| 93 | + curTraversal = PARENT; | ||
| 94 | + codeGenNode = codeGenNode.getParent(); | ||
| 95 | + } | ||
| 96 | + continue; | ||
| 97 | + } | ||
| 98 | + } | ||
| 84 | setCurNode(codeGenNode); | 99 | setCurNode(codeGenNode); |
| 85 | try { | 100 | try { |
| 86 | generateCodeEntry(codeGenNode, yangPlugin); | 101 | generateCodeEntry(codeGenNode, yangPlugin); | ... | ... |
| ... | @@ -17,13 +17,15 @@ | ... | @@ -17,13 +17,15 @@ |
| 17 | package org.onosproject.yangutils.translator.tojava.javamodel; | 17 | package org.onosproject.yangutils.translator.tojava.javamodel; |
| 18 | 18 | ||
| 19 | import java.util.Stack; | 19 | import java.util.Stack; |
| 20 | -import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes; | 20 | + |
| 21 | import org.onosproject.yangutils.datamodel.YangDerivedInfo; | 21 | import org.onosproject.yangutils.datamodel.YangDerivedInfo; |
| 22 | import org.onosproject.yangutils.datamodel.YangEnumeration; | 22 | import org.onosproject.yangutils.datamodel.YangEnumeration; |
| 23 | +import org.onosproject.yangutils.datamodel.YangLeafRef; | ||
| 23 | import org.onosproject.yangutils.datamodel.YangNode; | 24 | import org.onosproject.yangutils.datamodel.YangNode; |
| 24 | import org.onosproject.yangutils.datamodel.YangType; | 25 | import org.onosproject.yangutils.datamodel.YangType; |
| 25 | import org.onosproject.yangutils.datamodel.YangTypeDef; | 26 | import org.onosproject.yangutils.datamodel.YangTypeDef; |
| 26 | import org.onosproject.yangutils.datamodel.YangUnion; | 27 | import org.onosproject.yangutils.datamodel.YangUnion; |
| 28 | +import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes; | ||
| 27 | import org.onosproject.yangutils.translator.exception.TranslatorException; | 29 | import org.onosproject.yangutils.translator.exception.TranslatorException; |
| 28 | import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo; | 30 | import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo; |
| 29 | import org.onosproject.yangutils.translator.tojava.JavaFileInfo; | 31 | import org.onosproject.yangutils.translator.tojava.JavaFileInfo; |
| ... | @@ -101,6 +103,10 @@ public final class AttributesJavaDataType { | ... | @@ -101,6 +103,10 @@ public final class AttributesJavaDataType { |
| 101 | return STRING_DATA_TYPE; | 103 | return STRING_DATA_TYPE; |
| 102 | case BOOLEAN: | 104 | case BOOLEAN: |
| 103 | return BOOLEAN_DATA_TYPE; | 105 | return BOOLEAN_DATA_TYPE; |
| 106 | + case INSTANCE_IDENTIFIER: | ||
| 107 | + return STRING_DATA_TYPE; | ||
| 108 | + case LEAFREF: | ||
| 109 | + return getJavaDataType(getReferredTypeFromLeafref(yangType)); | ||
| 104 | default: | 110 | default: |
| 105 | throw new TranslatorException("given data type is not supported."); | 111 | throw new TranslatorException("given data type is not supported."); |
| 106 | } | 112 | } |
| ... | @@ -152,8 +158,8 @@ public final class AttributesJavaDataType { | ... | @@ -152,8 +158,8 @@ public final class AttributesJavaDataType { |
| 152 | case BINARY: | 158 | case BINARY: |
| 153 | return YANG_BINARY_CLASS; | 159 | return YANG_BINARY_CLASS; |
| 154 | case LEAFREF: | 160 | case LEAFREF: |
| 155 | - //TODO:LEAFREF | 161 | + YangType<?> referredType = getReferredTypeFromLeafref(yangType); |
| 156 | - break; | 162 | + return getJavaImportClass(referredType, isListAttr, pluginConfig); |
| 157 | case IDENTITYREF: | 163 | case IDENTITYREF: |
| 158 | //TODO:IDENTITYREF | 164 | //TODO:IDENTITYREF |
| 159 | break; | 165 | break; |
| ... | @@ -163,8 +169,7 @@ public final class AttributesJavaDataType { | ... | @@ -163,8 +169,7 @@ public final class AttributesJavaDataType { |
| 163 | return getCapitalCase(getCamelCase(((YangJavaUnion) yangType.getDataTypeExtendedInfo()).getName(), | 169 | return getCapitalCase(getCamelCase(((YangJavaUnion) yangType.getDataTypeExtendedInfo()).getName(), |
| 164 | pluginConfig)); | 170 | pluginConfig)); |
| 165 | case INSTANCE_IDENTIFIER: | 171 | case INSTANCE_IDENTIFIER: |
| 166 | - //TODO:INSTANCE_IDENTIFIER | 172 | + return STRING_DATA_TYPE; |
| 167 | - break; | ||
| 168 | case DERIVED: | 173 | case DERIVED: |
| 169 | return getCapitalCase( | 174 | return getCapitalCase( |
| 170 | getCamelCase(yangType.getDataTypeName(), pluginConfig)); | 175 | getCamelCase(yangType.getDataTypeName(), pluginConfig)); |
| ... | @@ -188,8 +193,8 @@ public final class AttributesJavaDataType { | ... | @@ -188,8 +193,8 @@ public final class AttributesJavaDataType { |
| 188 | case BINARY: | 193 | case BINARY: |
| 189 | return YANG_BINARY_CLASS; | 194 | return YANG_BINARY_CLASS; |
| 190 | case LEAFREF: | 195 | case LEAFREF: |
| 191 | - //TODO:LEAFREF | 196 | + YangType<?> referredType = getReferredTypeFromLeafref(yangType); |
| 192 | - break; | 197 | + return getJavaImportClass(referredType, isListAttr, pluginConfig); |
| 193 | case IDENTITYREF: | 198 | case IDENTITYREF: |
| 194 | //TODO:IDENTITYREF | 199 | //TODO:IDENTITYREF |
| 195 | break; | 200 | break; |
| ... | @@ -199,8 +204,7 @@ public final class AttributesJavaDataType { | ... | @@ -199,8 +204,7 @@ public final class AttributesJavaDataType { |
| 199 | return getCapitalCase(getCamelCase(((YangJavaUnion) yangType.getDataTypeExtendedInfo()).getName(), | 204 | return getCapitalCase(getCamelCase(((YangJavaUnion) yangType.getDataTypeExtendedInfo()).getName(), |
| 200 | pluginConfig)); | 205 | pluginConfig)); |
| 201 | case INSTANCE_IDENTIFIER: | 206 | case INSTANCE_IDENTIFIER: |
| 202 | - //TODO:INSTANCE_IDENTIFIER | 207 | + return STRING_DATA_TYPE; |
| 203 | - break; | ||
| 204 | case DERIVED: | 208 | case DERIVED: |
| 205 | return getCapitalCase( | 209 | return getCapitalCase( |
| 206 | getCamelCase(yangType.getDataTypeName(), pluginConfig)); | 210 | getCamelCase(yangType.getDataTypeName(), pluginConfig)); |
| ... | @@ -246,16 +250,15 @@ public final class AttributesJavaDataType { | ... | @@ -246,16 +250,15 @@ public final class AttributesJavaDataType { |
| 246 | case BINARY: | 250 | case BINARY: |
| 247 | return YANG_TYPES_PKG; | 251 | return YANG_TYPES_PKG; |
| 248 | case LEAFREF: | 252 | case LEAFREF: |
| 249 | - //TODO:LEAFREF | 253 | + YangType<?> referredType = getReferredTypeFromLeafref(yangType); |
| 250 | - break; | 254 | + return getJavaImportPackage(referredType, isListAttr, conflictResolver); |
| 251 | case IDENTITYREF: | 255 | case IDENTITYREF: |
| 252 | //TODO:IDENTITYREF | 256 | //TODO:IDENTITYREF |
| 253 | break; | 257 | break; |
| 254 | case UNION: | 258 | case UNION: |
| 255 | return getUnionPackage(yangType, conflictResolver); | 259 | return getUnionPackage(yangType, conflictResolver); |
| 256 | case INSTANCE_IDENTIFIER: | 260 | case INSTANCE_IDENTIFIER: |
| 257 | - //TODO:INSTANCE_IDENTIFIER | 261 | + return JAVA_LANG; |
| 258 | - break; | ||
| 259 | case DERIVED: | 262 | case DERIVED: |
| 260 | return getTypDefsPackage(yangType, conflictResolver); | 263 | return getTypDefsPackage(yangType, conflictResolver); |
| 261 | default: | 264 | default: |
| ... | @@ -274,8 +277,8 @@ public final class AttributesJavaDataType { | ... | @@ -274,8 +277,8 @@ public final class AttributesJavaDataType { |
| 274 | case BINARY: | 277 | case BINARY: |
| 275 | return YANG_TYPES_PKG; | 278 | return YANG_TYPES_PKG; |
| 276 | case LEAFREF: | 279 | case LEAFREF: |
| 277 | - //TODO:LEAFREF | 280 | + YangType<?> referredType = getReferredTypeFromLeafref(yangType); |
| 278 | - break; | 281 | + return getJavaImportPackage(referredType, isListAttr, conflictResolver); |
| 279 | case IDENTITYREF: | 282 | case IDENTITYREF: |
| 280 | //TODO:IDENTITYREF | 283 | //TODO:IDENTITYREF |
| 281 | break; | 284 | break; |
| ... | @@ -284,8 +287,7 @@ public final class AttributesJavaDataType { | ... | @@ -284,8 +287,7 @@ public final class AttributesJavaDataType { |
| 284 | case UNION: | 287 | case UNION: |
| 285 | return getUnionPackage(yangType, conflictResolver); | 288 | return getUnionPackage(yangType, conflictResolver); |
| 286 | case INSTANCE_IDENTIFIER: | 289 | case INSTANCE_IDENTIFIER: |
| 287 | - //TODO:INSTANCE_IDENTIFIER | 290 | + return JAVA_LANG; |
| 288 | - break; | ||
| 289 | case DERIVED: | 291 | case DERIVED: |
| 290 | return getTypDefsPackage(yangType, conflictResolver); | 292 | return getTypDefsPackage(yangType, conflictResolver); |
| 291 | default: | 293 | default: |
| ... | @@ -444,4 +446,15 @@ public final class AttributesJavaDataType { | ... | @@ -444,4 +446,15 @@ public final class AttributesJavaDataType { |
| 444 | .getPackage())); | 446 | .getPackage())); |
| 445 | } | 447 | } |
| 446 | } | 448 | } |
| 449 | + | ||
| 450 | + /** | ||
| 451 | + * Returns the referred type from leaf/leaf-list. | ||
| 452 | + * | ||
| 453 | + * @param type current type in leaf | ||
| 454 | + * @return type from the leafref | ||
| 455 | + */ | ||
| 456 | + private static YangType<?> getReferredTypeFromLeafref(YangType type) { | ||
| 457 | + YangLeafRef<?> leafRefInfo = (YangLeafRef<?>) type.getDataTypeExtendedInfo(); | ||
| 458 | + return leafRefInfo.getEffectiveDataType(); | ||
| 459 | + } | ||
| 447 | } | 460 | } | ... | ... |
| ... | @@ -18,8 +18,9 @@ package org.onosproject.yangutils.translator.tojava.utils; | ... | @@ -18,8 +18,9 @@ package org.onosproject.yangutils.translator.tojava.utils; |
| 18 | 18 | ||
| 19 | import java.util.List; | 19 | import java.util.List; |
| 20 | import java.util.Map; | 20 | import java.util.Map; |
| 21 | -import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes; | 21 | + |
| 22 | import org.onosproject.yangutils.datamodel.YangType; | 22 | import org.onosproject.yangutils.datamodel.YangType; |
| 23 | +import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes; | ||
| 23 | import org.onosproject.yangutils.translator.exception.TranslatorException; | 24 | import org.onosproject.yangutils.translator.exception.TranslatorException; |
| 24 | import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo; | 25 | import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo; |
| 25 | import org.onosproject.yangutils.utils.io.impl.JavaDocGen; | 26 | import org.onosproject.yangutils.utils.io.impl.JavaDocGen; |
| ... | @@ -118,6 +119,7 @@ import static org.onosproject.yangutils.utils.UtilConstants.TWELVE_SPACE_INDENTA | ... | @@ -118,6 +119,7 @@ import static org.onosproject.yangutils.utils.UtilConstants.TWELVE_SPACE_INDENTA |
| 118 | import static org.onosproject.yangutils.utils.UtilConstants.VALUE; | 119 | import static org.onosproject.yangutils.utils.UtilConstants.VALUE; |
| 119 | import static org.onosproject.yangutils.utils.UtilConstants.VOID; | 120 | import static org.onosproject.yangutils.utils.UtilConstants.VOID; |
| 120 | import static org.onosproject.yangutils.utils.UtilConstants.YANG_UTILS_TODO; | 121 | import static org.onosproject.yangutils.utils.UtilConstants.YANG_UTILS_TODO; |
| 122 | +import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc; | ||
| 121 | import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILD_METHOD; | 123 | import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILD_METHOD; |
| 122 | import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.CONSTRUCTOR; | 124 | import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.CONSTRUCTOR; |
| 123 | import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.DEFAULT_CONSTRUCTOR; | 125 | import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.DEFAULT_CONSTRUCTOR; |
| ... | @@ -127,7 +129,6 @@ import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.MAN | ... | @@ -127,7 +129,6 @@ import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.MAN |
| 127 | import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.OF_METHOD; | 129 | import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.OF_METHOD; |
| 128 | import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.SETTER_METHOD; | 130 | import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.SETTER_METHOD; |
| 129 | import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.TYPE_CONSTRUCTOR; | 131 | import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.TYPE_CONSTRUCTOR; |
| 130 | -import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc; | ||
| 131 | import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase; | 132 | import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase; |
| 132 | import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase; | 133 | import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase; |
| 133 | import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getSmallCase; | 134 | import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getSmallCase; | ... | ... |
| ... | @@ -282,6 +282,16 @@ public final class UtilConstants { | ... | @@ -282,6 +282,16 @@ public final class UtilConstants { |
| 282 | public static final String INPUT = "input"; | 282 | public static final String INPUT = "input"; |
| 283 | 283 | ||
| 284 | /** | 284 | /** |
| 285 | + * Static attribute for output string. | ||
| 286 | + */ | ||
| 287 | + public static final String OUTPUT = "output"; | ||
| 288 | + | ||
| 289 | + /** | ||
| 290 | + * Static attribute for current string. | ||
| 291 | + */ | ||
| 292 | + public static final String CURRENT = "current"; | ||
| 293 | + | ||
| 294 | + /** | ||
| 285 | * Static attribute for leafref string. | 295 | * Static attribute for leafref string. |
| 286 | */ | 296 | */ |
| 287 | public static final String LEAFREF = "leafref"; | 297 | public static final String LEAFREF = "leafref"; |
| ... | @@ -342,6 +352,41 @@ public final class UtilConstants { | ... | @@ -342,6 +352,41 @@ public final class UtilConstants { |
| 342 | public static final String COMMA = ","; | 352 | public static final String COMMA = ","; |
| 343 | 353 | ||
| 344 | /** | 354 | /** |
| 355 | + * Static attribute for slash character. | ||
| 356 | + */ | ||
| 357 | + public static final char CHAR_OF_SLASH = '/'; | ||
| 358 | + | ||
| 359 | + /** | ||
| 360 | + * Static attribute for open square bracket character. | ||
| 361 | + */ | ||
| 362 | + public static final char CHAR_OF_OPEN_SQUARE_BRACKET = '['; | ||
| 363 | + | ||
| 364 | + /** | ||
| 365 | + * Static attribute for close square bracket character. | ||
| 366 | + */ | ||
| 367 | + public static final char CHAR_OF_CLOSE_SQUARE_BRACKET = ']'; | ||
| 368 | + | ||
| 369 | + /** | ||
| 370 | + * Static attribute for slash string. | ||
| 371 | + */ | ||
| 372 | + public static final String SLASH_FOR_STRING = "/"; | ||
| 373 | + | ||
| 374 | + /** | ||
| 375 | + * Static attribute for open square bracket. | ||
| 376 | + */ | ||
| 377 | + public static final String OPEN_SQUARE_BRACKET = "["; | ||
| 378 | + | ||
| 379 | + /** | ||
| 380 | + * Static attribute for ancestor accessor. | ||
| 381 | + */ | ||
| 382 | + public static final String ANCESTOR_ACCESSOR = ".."; | ||
| 383 | + | ||
| 384 | + /** | ||
| 385 | + * Static attribute for ancestor accessor along with path. | ||
| 386 | + */ | ||
| 387 | + public static final String ANCESTOR_ACCESSOR_IN_PATH = "../"; | ||
| 388 | + | ||
| 389 | + /** | ||
| 345 | * Static attribute for add syntax. | 390 | * Static attribute for add syntax. |
| 346 | */ | 391 | */ |
| 347 | public static final String ADD_STRING = "add"; | 392 | public static final String ADD_STRING = "add"; |
| ... | @@ -1110,7 +1155,6 @@ public final class UtilConstants { | ... | @@ -1110,7 +1155,6 @@ public final class UtilConstants { |
| 1110 | */ | 1155 | */ |
| 1111 | public static final String YANG_DECIMAL64_CLASS = "YangDecimal64"; | 1156 | public static final String YANG_DECIMAL64_CLASS = "YangDecimal64"; |
| 1112 | 1157 | ||
| 1113 | - | ||
| 1114 | /** | 1158 | /** |
| 1115 | * Static attribute for YANG file error. | 1159 | * Static attribute for YANG file error. |
| 1116 | */ | 1160 | */ |
| ... | @@ -1140,12 +1184,18 @@ public final class UtilConstants { | ... | @@ -1140,12 +1184,18 @@ public final class UtilConstants { |
| 1140 | + "grouping for given uses"; | 1184 | + "grouping for given uses"; |
| 1141 | 1185 | ||
| 1142 | /** | 1186 | /** |
| 1143 | - * Static attribute for grouping linker error information. | 1187 | + * Static attribute for if-feature linker error information. |
| 1144 | */ | 1188 | */ |
| 1145 | public static final String FEATURE_LINKER_ERROR = "YANG file error: Unable to find feature " | 1189 | public static final String FEATURE_LINKER_ERROR = "YANG file error: Unable to find feature " |
| 1146 | + "for given if-feature"; | 1190 | + "for given if-feature"; |
| 1147 | 1191 | ||
| 1148 | /** | 1192 | /** |
| 1193 | + * Static attribute for leafref linker error information. | ||
| 1194 | + */ | ||
| 1195 | + public static final String LEAFREF_LINKER_ERROR = "YANG file error: Unable to find base " | ||
| 1196 | + + "leaf/leaf-list for given leafref"; | ||
| 1197 | + | ||
| 1198 | + /** | ||
| 1149 | * Static attribute for reference. | 1199 | * Static attribute for reference. |
| 1150 | */ | 1200 | */ |
| 1151 | public static final String REFERENCE = "Reference"; | 1201 | public static final String REFERENCE = "Reference"; | ... | ... |
| ... | @@ -534,7 +534,7 @@ package org.onosproject.yangutils.parser.antlrgencode; | ... | @@ -534,7 +534,7 @@ package org.onosproject.yangutils.parser.antlrgencode; |
| 534 | * require-instance-arg > | 534 | * require-instance-arg > |
| 535 | * require-instance-arg = true-keyword / false-keyword | 535 | * require-instance-arg = true-keyword / false-keyword |
| 536 | */ | 536 | */ |
| 537 | - requireInstanceStatement : REQUIRE_INSTANCE_KEYWORD (TRUE_KEYWORD | FALSE_KEYWORD) STMTEND; | 537 | + requireInstanceStatement : REQUIRE_INSTANCE_KEYWORD requireInstance STMTEND; |
| 538 | 538 | ||
| 539 | /** | 539 | /** |
| 540 | * instance-identifier-specification = | 540 | * instance-identifier-specification = |
| ... | @@ -1279,6 +1279,8 @@ package org.onosproject.yangutils.parser.antlrgencode; | ... | @@ -1279,6 +1279,8 @@ package org.onosproject.yangutils.parser.antlrgencode; |
| 1279 | 1279 | ||
| 1280 | refine : string; | 1280 | refine : string; |
| 1281 | 1281 | ||
| 1282 | + requireInstance : string; | ||
| 1283 | + | ||
| 1282 | augment : string; | 1284 | augment : string; |
| 1283 | 1285 | ||
| 1284 | deviation : string; | 1286 | deviation : string; | ... | ... |
| 1 | +/* | ||
| 2 | + * Copyright 2016-present Open Networking Laboratory | ||
| 3 | + * | ||
| 4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| 5 | + * you may not use this file except in compliance with the License. | ||
| 6 | + * You may obtain a copy of the License at | ||
| 7 | + * | ||
| 8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
| 9 | + * | ||
| 10 | + * Unless required by applicable law or agreed to in writing, software | ||
| 11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
| 12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| 13 | + * See the License for the specific language governing permissions and | ||
| 14 | + * limitations under the License. | ||
| 15 | + */ | ||
| 16 | + | ||
| 17 | +package org.onosproject.yangutils.parser.impl.listeners; | ||
| 18 | + | ||
| 19 | +import java.io.IOException; | ||
| 20 | +import java.util.ListIterator; | ||
| 21 | + | ||
| 22 | +import org.junit.Rule; | ||
| 23 | +import org.junit.Test; | ||
| 24 | +import org.junit.rules.ExpectedException; | ||
| 25 | + | ||
| 26 | +import org.onosproject.yangutils.datamodel.YangContainer; | ||
| 27 | +import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes; | ||
| 28 | +import org.onosproject.yangutils.datamodel.YangLeaf; | ||
| 29 | +import org.onosproject.yangutils.datamodel.YangLeafRef; | ||
| 30 | +import org.onosproject.yangutils.datamodel.YangModule; | ||
| 31 | +import org.onosproject.yangutils.datamodel.YangNode; | ||
| 32 | +import org.onosproject.yangutils.datamodel.YangNodeType; | ||
| 33 | +import org.onosproject.yangutils.datamodel.YangType; | ||
| 34 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
| 35 | +import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; | ||
| 36 | + | ||
| 37 | +import static org.hamcrest.MatcherAssert.assertThat; | ||
| 38 | +import static org.hamcrest.core.Is.is; | ||
| 39 | +/** | ||
| 40 | + * Test cases for require-instance listener. | ||
| 41 | + */ | ||
| 42 | +public class RequireInstanceListenerTest { | ||
| 43 | + | ||
| 44 | + @Rule | ||
| 45 | + public ExpectedException thrown = ExpectedException.none(); | ||
| 46 | + | ||
| 47 | + private final YangUtilsParserManager manager = new YangUtilsParserManager(); | ||
| 48 | + | ||
| 49 | + /** | ||
| 50 | + * Checks require-statement with true as status. | ||
| 51 | + */ | ||
| 52 | + @Test | ||
| 53 | + public void processRequireInstanceTrue() throws IOException, ParserException { | ||
| 54 | + | ||
| 55 | + YangNode node = manager.getDataModel("src/test/resources/RequireInstanceTrue.yang"); | ||
| 56 | + | ||
| 57 | + // Check whether the data model tree returned is of type module. | ||
| 58 | + assertThat((node instanceof YangModule), is(true)); | ||
| 59 | + | ||
| 60 | + // Check whether the node type is set properly to module. | ||
| 61 | + assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE)); | ||
| 62 | + | ||
| 63 | + // Check whether the module name is set correctly. | ||
| 64 | + YangModule yangNode = (YangModule) node; | ||
| 65 | + assertThat(yangNode.getName(), is("PathListener")); | ||
| 66 | + | ||
| 67 | + YangContainer container = (YangContainer) yangNode.getChild().getNextSibling(); | ||
| 68 | + ListIterator<YangLeaf> leafIterator = container.getListOfLeaf().listIterator(); | ||
| 69 | + YangLeaf leafInfo = leafIterator.next(); | ||
| 70 | + | ||
| 71 | + // Check whether the require-instance value is set correctly in leafref. | ||
| 72 | + assertThat(leafInfo.getName(), is("ifname")); | ||
| 73 | + YangLeafRef yangLeafRef = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo(); | ||
| 74 | + assertThat(yangLeafRef.getRequireInstance(), is(true)); | ||
| 75 | + } | ||
| 76 | + | ||
| 77 | + /** | ||
| 78 | + * Checks require-statement with false as status. | ||
| 79 | + */ | ||
| 80 | + @Test | ||
| 81 | + public void processRequireInstanceFalse() throws IOException, ParserException { | ||
| 82 | + | ||
| 83 | + YangNode node = manager.getDataModel("src/test/resources/RequireInstanceFalse.yang"); | ||
| 84 | + | ||
| 85 | + // Check whether the data model tree returned is of type module. | ||
| 86 | + assertThat((node instanceof YangModule), is(true)); | ||
| 87 | + | ||
| 88 | + // Check whether the node type is set properly to module. | ||
| 89 | + assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE)); | ||
| 90 | + | ||
| 91 | + // Check whether the module name is set correctly. | ||
| 92 | + YangModule yangNode = (YangModule) node; | ||
| 93 | + assertThat(yangNode.getName(), is("PathListener")); | ||
| 94 | + | ||
| 95 | + ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator(); | ||
| 96 | + YangLeaf leafInfo = leafIterator.next(); | ||
| 97 | + | ||
| 98 | + // Check whether the require-instance value is set correctly in instance-identifier. | ||
| 99 | + assertThat(leafInfo.getName(), is("admin-status")); | ||
| 100 | + | ||
| 101 | + YangType type = leafInfo.getDataType(); | ||
| 102 | + | ||
| 103 | + assertThat(type.getDataType(), is(YangDataTypes.INSTANCE_IDENTIFIER)); | ||
| 104 | + boolean status = ((YangType<Boolean>) type).getDataTypeExtendedInfo(); | ||
| 105 | + | ||
| 106 | + assertThat(status, is(false)); | ||
| 107 | + } | ||
| 108 | + | ||
| 109 | + /** | ||
| 110 | + * Checks require-statement default value when its not there in YANG under instance-identifier. | ||
| 111 | + */ | ||
| 112 | + @Test | ||
| 113 | + public void processRequireInstanceDefaultValueInInstanceIdentifier() throws IOException, ParserException { | ||
| 114 | + | ||
| 115 | + YangNode node = manager.getDataModel("src/test/resources/RequireInstanceDefaultValueInInstanceIdentifier.yang"); | ||
| 116 | + | ||
| 117 | + // Check whether the data model tree returned is of type module. | ||
| 118 | + assertThat((node instanceof YangModule), is(true)); | ||
| 119 | + | ||
| 120 | + // Check whether the node type is set properly to module. | ||
| 121 | + assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE)); | ||
| 122 | + | ||
| 123 | + // Check whether the module name is set correctly. | ||
| 124 | + YangModule yangNode = (YangModule) node; | ||
| 125 | + assertThat(yangNode.getName(), is("PathListener")); | ||
| 126 | + | ||
| 127 | + ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator(); | ||
| 128 | + YangLeaf leafInfo = leafIterator.next(); | ||
| 129 | + | ||
| 130 | + // Check whether the require-instance value is set correctly in instance-identifier. | ||
| 131 | + assertThat(leafInfo.getName(), is("admin-status")); | ||
| 132 | + | ||
| 133 | + YangType type = leafInfo.getDataType(); | ||
| 134 | + | ||
| 135 | + assertThat(type.getDataType(), is(YangDataTypes.INSTANCE_IDENTIFIER)); | ||
| 136 | + | ||
| 137 | + boolean status = ((YangType<Boolean>) type).getDataTypeExtendedInfo(); | ||
| 138 | + assertThat(status, is(true)); | ||
| 139 | + } | ||
| 140 | + | ||
| 141 | + /** | ||
| 142 | + * Checks require-statement default value when its not there in YANG under leafref. | ||
| 143 | + */ | ||
| 144 | + @Test | ||
| 145 | + public void processRequireInstanceDefaultValueForLeafref() throws IOException, ParserException { | ||
| 146 | + | ||
| 147 | + YangNode node = manager.getDataModel("src/test/resources/RequireInstanceDefaultValueForLeafref.yang"); | ||
| 148 | + | ||
| 149 | + // Check whether the data model tree returned is of type module. | ||
| 150 | + assertThat((node instanceof YangModule), is(true)); | ||
| 151 | + | ||
| 152 | + // Check whether the node type is set properly to module. | ||
| 153 | + assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE)); | ||
| 154 | + | ||
| 155 | + // Check whether the module name is set correctly. | ||
| 156 | + YangModule yangNode = (YangModule) node; | ||
| 157 | + assertThat(yangNode.getName(), is("PathListener")); | ||
| 158 | + | ||
| 159 | + YangContainer container = (YangContainer) yangNode.getChild().getNextSibling(); | ||
| 160 | + ListIterator<YangLeaf> leafIterator = container.getListOfLeaf().listIterator(); | ||
| 161 | + YangLeaf leafInfo = leafIterator.next(); | ||
| 162 | + | ||
| 163 | + // Check whether the require-instance value is set correctly in leafref. | ||
| 164 | + assertThat(leafInfo.getName(), is("ifname")); | ||
| 165 | + YangLeafRef yangLeafRef = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo(); | ||
| 166 | + assertThat(yangLeafRef.getRequireInstance(), is(true)); | ||
| 167 | + } | ||
| 168 | +} |
| ... | @@ -20,6 +20,7 @@ import java.util.ListIterator; | ... | @@ -20,6 +20,7 @@ import java.util.ListIterator; |
| 20 | import org.junit.Rule; | 20 | import org.junit.Rule; |
| 21 | import org.junit.Test; | 21 | import org.junit.Test; |
| 22 | import org.junit.rules.ExpectedException; | 22 | import org.junit.rules.ExpectedException; |
| 23 | +import org.onosproject.yangutils.datamodel.YangContainer; | ||
| 23 | import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes; | 24 | import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes; |
| 24 | import org.onosproject.yangutils.datamodel.YangLeaf; | 25 | import org.onosproject.yangutils.datamodel.YangLeaf; |
| 25 | import org.onosproject.yangutils.datamodel.YangLeafList; | 26 | import org.onosproject.yangutils.datamodel.YangLeafList; |
| ... | @@ -121,20 +122,6 @@ public class TypeListenerTest { | ... | @@ -121,20 +122,6 @@ public class TypeListenerTest { |
| 121 | } | 122 | } |
| 122 | 123 | ||
| 123 | /** | 124 | /** |
| 124 | - * Checks for unsupported type leafref. | ||
| 125 | - */ | ||
| 126 | - @Test | ||
| 127 | - public void processLeafrefType() throws IOException, ParserException { | ||
| 128 | - | ||
| 129 | - thrown.expect(ParserException.class); | ||
| 130 | - thrown.expectMessage("YANG file error : \"leafref\" is not supported in current version," | ||
| 131 | - + " please check wiki for YANG utils road map."); | ||
| 132 | - | ||
| 133 | - YangNode node = manager | ||
| 134 | - .getDataModel("src/test/resources/LeafrefInvalidIdentifier.yang"); | ||
| 135 | - } | ||
| 136 | - | ||
| 137 | - /** | ||
| 138 | * Checks for unsupported type identityref. | 125 | * Checks for unsupported type identityref. |
| 139 | */ | 126 | */ |
| 140 | @Test | 127 | @Test |
| ... | @@ -149,16 +136,29 @@ public class TypeListenerTest { | ... | @@ -149,16 +136,29 @@ public class TypeListenerTest { |
| 149 | } | 136 | } |
| 150 | 137 | ||
| 151 | /** | 138 | /** |
| 152 | - * Checks for unsupported type instance identifier. | 139 | + * Checks for type instance-identifier. |
| 153 | */ | 140 | */ |
| 154 | @Test | 141 | @Test |
| 155 | public void processInstanceIdentifierType() throws IOException, ParserException { | 142 | public void processInstanceIdentifierType() throws IOException, ParserException { |
| 156 | 143 | ||
| 157 | - thrown.expect(ParserException.class); | ||
| 158 | - thrown.expectMessage("YANG file error : \"instance-identifier\" is not supported in current version," | ||
| 159 | - + " please check wiki for YANG utils road map."); | ||
| 160 | - | ||
| 161 | YangNode node = manager | 144 | YangNode node = manager |
| 162 | - .getDataModel("src/test/resources/InstanceIdentifierInvalidIdentifier.yang"); | 145 | + .getDataModel("src/test/resources/InstanceIdentifierListener.yang"); |
| 146 | + | ||
| 147 | + // Check whether the data model tree returned is of type module. | ||
| 148 | + assertThat((node instanceof YangModule), is(true)); | ||
| 149 | + | ||
| 150 | + // Check whether the node type is set properly to module. | ||
| 151 | + assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE)); | ||
| 152 | + | ||
| 153 | + // Check whether the module name is set correctly. | ||
| 154 | + YangModule yangNode = (YangModule) node; | ||
| 155 | + assertThat(yangNode.getName(), is("Test")); | ||
| 156 | + YangContainer container = (YangContainer) yangNode.getChild(); | ||
| 157 | + ListIterator<YangLeaf> leafIterator = container.getListOfLeaf().listIterator(); | ||
| 158 | + YangLeaf leafInfo = leafIterator.next(); | ||
| 159 | + | ||
| 160 | + assertThat(leafInfo.getName(), is("invalid-interval")); | ||
| 161 | + assertThat(leafInfo.getDataType().getDataTypeName(), is("instance-identifier")); | ||
| 162 | + assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.INSTANCE_IDENTIFIER)); | ||
| 163 | } | 163 | } |
| 164 | } | 164 | } | ... | ... |
This diff is collapsed. Click to expand it.
| ... | @@ -18,11 +18,15 @@ package org.onosproject.yangutils.plugin.manager; | ... | @@ -18,11 +18,15 @@ package org.onosproject.yangutils.plugin.manager; |
| 18 | 18 | ||
| 19 | import java.io.IOException; | 19 | import java.io.IOException; |
| 20 | import java.util.List; | 20 | import java.util.List; |
| 21 | +import java.util.ListIterator; | ||
| 22 | + | ||
| 21 | import org.junit.Test; | 23 | import org.junit.Test; |
| 22 | import org.onosproject.yangutils.datamodel.YangContainer; | 24 | import org.onosproject.yangutils.datamodel.YangContainer; |
| 25 | +import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes; | ||
| 23 | import org.onosproject.yangutils.datamodel.YangFeature; | 26 | import org.onosproject.yangutils.datamodel.YangFeature; |
| 24 | import org.onosproject.yangutils.datamodel.YangIfFeature; | 27 | import org.onosproject.yangutils.datamodel.YangIfFeature; |
| 25 | import org.onosproject.yangutils.datamodel.YangLeaf; | 28 | import org.onosproject.yangutils.datamodel.YangLeaf; |
| 29 | +import org.onosproject.yangutils.datamodel.YangLeafRef; | ||
| 26 | import org.onosproject.yangutils.datamodel.YangModule; | 30 | import org.onosproject.yangutils.datamodel.YangModule; |
| 27 | import org.onosproject.yangutils.datamodel.YangNode; | 31 | import org.onosproject.yangutils.datamodel.YangNode; |
| 28 | import org.onosproject.yangutils.datamodel.YangNodeType; | 32 | import org.onosproject.yangutils.datamodel.YangNodeType; |
| ... | @@ -217,4 +221,111 @@ public class IntraFileIfFeatureLinkingTest { | ... | @@ -217,4 +221,111 @@ public class IntraFileIfFeatureLinkingTest { |
| 217 | assertThat(ifFeature.getName().getName(), is("local-storage")); | 221 | assertThat(ifFeature.getName().getName(), is("local-storage")); |
| 218 | assertThat(ifFeature.getResolvableStatus(), is(ResolvableStatus.RESOLVED)); | 222 | assertThat(ifFeature.getResolvableStatus(), is(ResolvableStatus.RESOLVED)); |
| 219 | } | 223 | } |
| 224 | + | ||
| 225 | + /** | ||
| 226 | + * Checks addition of if-feature list to leafref. | ||
| 227 | + */ | ||
| 228 | + @Test | ||
| 229 | + public void processSelfFileLinkingWithFeatureReferredByLeafref() | ||
| 230 | + throws IOException, ParserException { | ||
| 231 | + | ||
| 232 | + YangNode node = manager | ||
| 233 | + .getDataModel("src/test/resources/SelfFileLinkingWithFeatureReferredByLeafref.yang"); | ||
| 234 | + | ||
| 235 | + // Check whether the data model tree returned is of type module. | ||
| 236 | + assertThat((node instanceof YangModule), is(true)); | ||
| 237 | + | ||
| 238 | + // Check whether the node type is set properly to module. | ||
| 239 | + assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE)); | ||
| 240 | + | ||
| 241 | + // Check whether the module name is set correctly. | ||
| 242 | + YangModule yangNode = (YangModule) node; | ||
| 243 | + assertThat(yangNode.getName(), is("syslog")); | ||
| 244 | + | ||
| 245 | + List<YangFeature> featureList = yangNode.getFeatureList(); | ||
| 246 | + YangFeature feature = featureList.iterator().next(); | ||
| 247 | + assertThat(feature.getName(), is("local-storage")); | ||
| 248 | + | ||
| 249 | + YangContainer container = (YangContainer) yangNode.getChild(); | ||
| 250 | + assertThat(container.getName(), is("speed")); | ||
| 251 | + | ||
| 252 | + List<YangLeaf> listOfLeaf = container.getListOfLeaf(); | ||
| 253 | + YangLeaf leaf = listOfLeaf.iterator().next(); | ||
| 254 | + assertThat(leaf.getName(), is("local-storage-limit")); | ||
| 255 | + | ||
| 256 | + List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList(); | ||
| 257 | + YangIfFeature ifFeature = ifFeatureList.iterator().next(); | ||
| 258 | + assertThat(ifFeature.getName().getName(), is("local-storage")); | ||
| 259 | + assertThat(ifFeature.getResolvableStatus(), is(ResolvableStatus.RESOLVED)); | ||
| 260 | + | ||
| 261 | + ListIterator<YangLeaf> listOfLeafInModule = yangNode.getListOfLeaf().listIterator(); | ||
| 262 | + YangLeaf yangLeaf = listOfLeafInModule.next(); | ||
| 263 | + assertThat(yangLeaf.getName(), is("storage-value")); | ||
| 264 | + | ||
| 265 | + YangLeafRef leafRef = (YangLeafRef) yangLeaf.getDataType().getDataTypeExtendedInfo(); | ||
| 266 | + | ||
| 267 | + assertThat(leafRef.getEffectiveDataType().getDataType(), is(YangDataTypes.UINT64)); | ||
| 268 | + | ||
| 269 | + List<YangIfFeature> ifFeatureListInLeafref = leafRef.getIfFeatureList(); | ||
| 270 | + YangIfFeature ifFeatureInLeafref = ifFeatureListInLeafref.iterator().next(); | ||
| 271 | + assertThat(ifFeatureInLeafref.getName().getName(), is("local-storage")); | ||
| 272 | + assertThat(ifFeatureInLeafref.getResolvableStatus(), is(ResolvableStatus.RESOLVED)); | ||
| 273 | + } | ||
| 274 | + | ||
| 275 | + /** | ||
| 276 | + * Checks addition of if-feature list to leafref when referred leaf is again having leafref in it. | ||
| 277 | + */ | ||
| 278 | + @Test | ||
| 279 | + public void processSelfFileLinkingWithFeatureReferredByMultiLeafref() | ||
| 280 | + throws IOException, ParserException { | ||
| 281 | + | ||
| 282 | + YangNode node = manager | ||
| 283 | + .getDataModel("src/test/resources/SelfFileLinkingWithFeatureReferredByMultiLeafref.yang"); | ||
| 284 | + | ||
| 285 | + // Check whether the data model tree returned is of type module. | ||
| 286 | + assertThat((node instanceof YangModule), is(true)); | ||
| 287 | + | ||
| 288 | + // Check whether the node type is set properly to module. | ||
| 289 | + assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE)); | ||
| 290 | + | ||
| 291 | + // Check whether the module name is set correctly. | ||
| 292 | + YangModule yangNode = (YangModule) node; | ||
| 293 | + assertThat(yangNode.getName(), is("syslog")); | ||
| 294 | + | ||
| 295 | + List<YangFeature> featureList = yangNode.getFeatureList(); | ||
| 296 | + YangFeature feature = featureList.iterator().next(); | ||
| 297 | + assertThat(feature.getName(), is("local-storage")); | ||
| 298 | + | ||
| 299 | + YangContainer container = (YangContainer) yangNode.getChild(); | ||
| 300 | + assertThat(container.getName(), is("speed")); | ||
| 301 | + | ||
| 302 | + List<YangLeaf> listOfLeaf = container.getListOfLeaf(); | ||
| 303 | + YangLeaf leaf = listOfLeaf.iterator().next(); | ||
| 304 | + assertThat(leaf.getName(), is("local-storage-limit")); | ||
| 305 | + | ||
| 306 | + List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList(); | ||
| 307 | + YangIfFeature ifFeature = ifFeatureList.iterator().next(); | ||
| 308 | + assertThat(ifFeature.getName().getName(), is("local-storage")); | ||
| 309 | + assertThat(ifFeature.getResolvableStatus(), is(ResolvableStatus.RESOLVED)); | ||
| 310 | + | ||
| 311 | + ListIterator<YangLeaf> listOfLeafInModule = yangNode.getListOfLeaf().listIterator(); | ||
| 312 | + YangLeaf yangLeaf = listOfLeafInModule.next(); | ||
| 313 | + assertThat(yangLeaf.getName(), is("storage-value")); | ||
| 314 | + | ||
| 315 | + YangLeafRef leafRef = (YangLeafRef) yangLeaf.getDataType().getDataTypeExtendedInfo(); | ||
| 316 | + | ||
| 317 | + assertThat(leafRef.getEffectiveDataType().getDataType(), is(YangDataTypes.UINT64)); | ||
| 318 | + | ||
| 319 | + List<YangIfFeature> ifFeatureListInLeafref = leafRef.getIfFeatureList(); | ||
| 320 | + YangIfFeature ifFeatureInLeafref = ifFeatureListInLeafref.iterator().next(); | ||
| 321 | + | ||
| 322 | + assertThat(ifFeatureInLeafref.getName().getName(), is("main-storage")); | ||
| 323 | + assertThat(ifFeatureInLeafref.getResolvableStatus(), is(ResolvableStatus.RESOLVED)); | ||
| 324 | + | ||
| 325 | + YangIfFeature ifFeatureInLeafref1 = ifFeatureListInLeafref.iterator().next(); | ||
| 326 | + | ||
| 327 | + assertThat(ifFeatureInLeafref1.getName().getName(), is("main-storage")); | ||
| 328 | + assertThat(ifFeatureInLeafref1.getResolvableStatus(), is(ResolvableStatus.RESOLVED)); | ||
| 329 | + | ||
| 330 | + } | ||
| 220 | } | 331 | } | ... | ... |
This diff is collapsed. Click to expand it.
| 1 | +module PathListener { | ||
| 2 | + namespace "test"; | ||
| 3 | + prefix test; | ||
| 4 | + list interface { | ||
| 5 | + key "name"; | ||
| 6 | + leaf name { | ||
| 7 | + type string; | ||
| 8 | + } | ||
| 9 | + leaf admin-status { | ||
| 10 | + type string; | ||
| 11 | + } | ||
| 12 | + list address { | ||
| 13 | + key "ip"; | ||
| 14 | + leaf ip { | ||
| 15 | + type string; | ||
| 16 | + } | ||
| 17 | + } | ||
| 18 | + } | ||
| 19 | + container default-address { | ||
| 20 | + leaf ifname { | ||
| 21 | + type leafref { | ||
| 22 | + path "../../test:interface/test:name"; | ||
| 23 | + } | ||
| 24 | + } | ||
| 25 | + leaf status { | ||
| 26 | + type leafref { | ||
| 27 | + path "/test:interface[name = current()/../ifname]/test:admin-status"; | ||
| 28 | + } | ||
| 29 | + } | ||
| 30 | + } | ||
| 31 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +module PathListener { | ||
| 2 | + namespace "test"; | ||
| 3 | + prefix test; | ||
| 4 | + list interface { | ||
| 5 | + key "name"; | ||
| 6 | + leaf name { | ||
| 7 | + type string; | ||
| 8 | + } | ||
| 9 | + leaf admin-status { | ||
| 10 | + type string; | ||
| 11 | + } | ||
| 12 | + list address { | ||
| 13 | + key "ip"; | ||
| 14 | + leaf ip { | ||
| 15 | + type string; | ||
| 16 | + } | ||
| 17 | + } | ||
| 18 | + } | ||
| 19 | + container default-address { | ||
| 20 | + leaf ifname { | ||
| 21 | + type leafref { | ||
| 22 | + path "../../test:interface/test:name"; | ||
| 23 | + } | ||
| 24 | + } | ||
| 25 | + leaf status { | ||
| 26 | + type leafref { | ||
| 27 | + path "/test:interface[name = current()/../ifname]/test:admin-status"; | ||
| 28 | + } | ||
| 29 | + } | ||
| 30 | + } | ||
| 31 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +module PathListener { | ||
| 2 | + namespace "test"; | ||
| 3 | + prefix test; | ||
| 4 | + list interface { | ||
| 5 | + key "name"; | ||
| 6 | + leaf name { | ||
| 7 | + type string; | ||
| 8 | + } | ||
| 9 | + leaf admin-status { | ||
| 10 | + type string; | ||
| 11 | + } | ||
| 12 | + list address { | ||
| 13 | + key "ip"; | ||
| 14 | + leaf ip { | ||
| 15 | + type string; | ||
| 16 | + } | ||
| 17 | + } | ||
| 18 | + } | ||
| 19 | + container default-address { | ||
| 20 | + leaf ifname { | ||
| 21 | + type leafref { | ||
| 22 | + path "../../test:interface/test:name"; | ||
| 23 | + require-instance true; | ||
| 24 | + } | ||
| 25 | + } | ||
| 26 | + leaf status { | ||
| 27 | + type leafref { | ||
| 28 | + path "/test:interface[name = current()/../ifname]/test:admin-status"; | ||
| 29 | + } | ||
| 30 | + } | ||
| 31 | + } | ||
| 32 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
utils/yangutils/plugin/src/test/resources/SelfFileLinkingWithFeatureReferredByLeafref.yang
0 → 100644
| 1 | +module syslog { | ||
| 2 | + yang-version 1; | ||
| 3 | + namespace http://huawei.com; | ||
| 4 | + prefix "sys"; | ||
| 5 | + feature local-storage { | ||
| 6 | + description | ||
| 7 | + "This feature means the device supports local | ||
| 8 | + storage (memory, flash or disk) that can be used to | ||
| 9 | + store syslog messages."; | ||
| 10 | + } | ||
| 11 | + | ||
| 12 | + container speed { | ||
| 13 | + leaf local-storage-limit { | ||
| 14 | + if-feature local-storage; | ||
| 15 | + type uint64; | ||
| 16 | + units "kilobyte"; | ||
| 17 | + config false; | ||
| 18 | + description | ||
| 19 | + "The amount of local storage that can be | ||
| 20 | + used to hold syslog messages."; | ||
| 21 | + } | ||
| 22 | + } | ||
| 23 | + leaf storage-value { | ||
| 24 | + type leafref { | ||
| 25 | + path "/speed/local-storage-limit"; | ||
| 26 | + } | ||
| 27 | + } | ||
| 28 | +} |
utils/yangutils/plugin/src/test/resources/SelfFileLinkingWithFeatureReferredByMultiLeafref.yang
0 → 100644
| 1 | +module syslog { | ||
| 2 | + yang-version 1; | ||
| 3 | + namespace http://huawei.com; | ||
| 4 | + prefix "sys"; | ||
| 5 | + feature local-storage { | ||
| 6 | + description | ||
| 7 | + "This feature means the device supports local | ||
| 8 | + storage (memory, flash or disk) that can be used to | ||
| 9 | + store syslog messages."; | ||
| 10 | + } | ||
| 11 | + feature main-storage { | ||
| 12 | + description | ||
| 13 | + "This feature means the device supports main | ||
| 14 | + storage that can be used to | ||
| 15 | + store syslog messages."; | ||
| 16 | + } | ||
| 17 | + | ||
| 18 | + container speed { | ||
| 19 | + leaf local-storage-limit { | ||
| 20 | + if-feature local-storage; | ||
| 21 | + type leafref { | ||
| 22 | + path "/value"; | ||
| 23 | + } | ||
| 24 | + units "kilobyte"; | ||
| 25 | + config false; | ||
| 26 | + description | ||
| 27 | + "The amount of local storage that can be | ||
| 28 | + used to hold syslog messages."; | ||
| 29 | + } | ||
| 30 | + } | ||
| 31 | + leaf storage-value { | ||
| 32 | + type leafref { | ||
| 33 | + path "/speed/local-storage-limit"; | ||
| 34 | + } | ||
| 35 | + } | ||
| 36 | + leaf value { | ||
| 37 | + if-feature main-storage; | ||
| 38 | + type uint64; | ||
| 39 | + } | ||
| 40 | +} |
utils/yangutils/plugin/src/test/resources/SelfResolutionWhenLeafrefDoesNotReferToLeafOrLeafList.yang
0 → 100644
| 1 | +module ietf-network { | ||
| 2 | + yang-version 1; | ||
| 3 | + namespace "urn:ietf:params:xml:ns:yang:ietf-network"; | ||
| 4 | + prefix nd; | ||
| 5 | + container networks { | ||
| 6 | + description | ||
| 7 | + "Serves as top-level container for a list of networks."; | ||
| 8 | + leaf network-id { | ||
| 9 | + type status; | ||
| 10 | + description | ||
| 11 | + "Identifies a network."; | ||
| 12 | + } | ||
| 13 | + } | ||
| 14 | + typedef status { | ||
| 15 | + type uint8; | ||
| 16 | + } | ||
| 17 | + leaf network-ref { | ||
| 18 | + type leafref { | ||
| 19 | + path "/networks"; | ||
| 20 | + } | ||
| 21 | + } | ||
| 22 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +module ietf-network { | ||
| 2 | + yang-version 1; | ||
| 3 | + namespace "urn:ietf:params:xml:ns:yang:ietf-network"; | ||
| 4 | + prefix nd; | ||
| 5 | + container networks { | ||
| 6 | + description | ||
| 7 | + "Serves as top-level container for a list of networks."; | ||
| 8 | + leaf network-id { | ||
| 9 | + type uint8; | ||
| 10 | + description | ||
| 11 | + "Identifies a network."; | ||
| 12 | + } | ||
| 13 | + } | ||
| 14 | + leaf-list network-ref { | ||
| 15 | + type leafref; | ||
| 16 | + } | ||
| 17 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
utils/yangutils/plugin/src/test/resources/SelfResolutionWhenLeafrefInModuleReferToGrouping.yang
0 → 100644
| 1 | +module ietf-network { | ||
| 2 | + yang-version 1; | ||
| 3 | + namespace "urn:ietf:params:xml:ns:yang:ietf-network"; | ||
| 4 | + prefix nd; | ||
| 5 | + rpc networks { | ||
| 6 | + description | ||
| 7 | + "Serves as top-level container for a list of networks."; | ||
| 8 | + grouping input { | ||
| 9 | + leaf network-id { | ||
| 10 | + type string; | ||
| 11 | + description | ||
| 12 | + "Identifies a network."; | ||
| 13 | + } | ||
| 14 | + } | ||
| 15 | + input { | ||
| 16 | + leaf network-id { | ||
| 17 | + type uint8; | ||
| 18 | + description | ||
| 19 | + "Identifies a network."; | ||
| 20 | + } | ||
| 21 | + } | ||
| 22 | + output { | ||
| 23 | + } | ||
| 24 | + } | ||
| 25 | + leaf network-ref { | ||
| 26 | + type leafref { | ||
| 27 | + path "/networks/input/network-id"; | ||
| 28 | + } | ||
| 29 | + } | ||
| 30 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +module ietf-network { | ||
| 2 | + yang-version 1; | ||
| 3 | + namespace "urn:ietf:params:xml:ns:yang:ietf-network"; | ||
| 4 | + prefix nd; | ||
| 5 | + grouping networks { | ||
| 6 | + leaf network-id { | ||
| 7 | + type uint8; | ||
| 8 | + description | ||
| 9 | + "Identifies a network."; | ||
| 10 | + } | ||
| 11 | + } | ||
| 12 | + container current { | ||
| 13 | + leaf network-ref { | ||
| 14 | + type leafref { | ||
| 15 | + path "/networks/network-id"; | ||
| 16 | + } | ||
| 17 | + } | ||
| 18 | + } | ||
| 19 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +module ietf-network { | ||
| 2 | + yang-version 1; | ||
| 3 | + namespace "urn:ietf:params:xml:ns:yang:ietf-network"; | ||
| 4 | + prefix nd; | ||
| 5 | + rpc networks { | ||
| 6 | + description | ||
| 7 | + "Serves as top-level container for a list of networks."; | ||
| 8 | + grouping input { | ||
| 9 | + leaf network-id { | ||
| 10 | + type string; | ||
| 11 | + description | ||
| 12 | + "Identifies a network."; | ||
| 13 | + } | ||
| 14 | + } | ||
| 15 | + input { | ||
| 16 | + leaf network-id { | ||
| 17 | + type uint8; | ||
| 18 | + description | ||
| 19 | + "Identifies a network."; | ||
| 20 | + } | ||
| 21 | + } | ||
| 22 | + } | ||
| 23 | + leaf network-ref { | ||
| 24 | + type leafref { | ||
| 25 | + path "/networks/input/network-id"; | ||
| 26 | + } | ||
| 27 | + } | ||
| 28 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +module ietf-network { | ||
| 2 | + yang-version 1; | ||
| 3 | + namespace "urn:ietf:params:xml:ns:yang:ietf-network"; | ||
| 4 | + prefix nd; | ||
| 5 | + rpc networks { | ||
| 6 | + description | ||
| 7 | + "Serves as top-level container for a list of networks."; | ||
| 8 | + grouping input { | ||
| 9 | + leaf network-id { | ||
| 10 | + type string; | ||
| 11 | + description | ||
| 12 | + "Identifies a network."; | ||
| 13 | + } | ||
| 14 | + } | ||
| 15 | + input { | ||
| 16 | + leaf network-id { | ||
| 17 | + type uint8; | ||
| 18 | + description | ||
| 19 | + "Identifies a network."; | ||
| 20 | + } | ||
| 21 | + } | ||
| 22 | + } | ||
| 23 | + leaf network-ref { | ||
| 24 | + type leafref { | ||
| 25 | + path "../networks/input/network-id"; | ||
| 26 | + } | ||
| 27 | + } | ||
| 28 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
utils/yangutils/plugin/src/test/resources/SelfResolutionWhenLeafrefInModuleReferToInvalidNode.yang
0 → 100644
| 1 | +module ietf-network { | ||
| 2 | + yang-version 1; | ||
| 3 | + namespace "urn:ietf:params:xml:ns:yang:ietf-network"; | ||
| 4 | + prefix nd; | ||
| 5 | + container networks { | ||
| 6 | + description | ||
| 7 | + "Serves as top-level container for a list of networks."; | ||
| 8 | + leaf network-id { | ||
| 9 | + type uint8; | ||
| 10 | + description | ||
| 11 | + "Identifies a network."; | ||
| 12 | + } | ||
| 13 | + } | ||
| 14 | + leaf network-ref { | ||
| 15 | + type leafref { | ||
| 16 | + path "/define/network-id"; | ||
| 17 | + } | ||
| 18 | + } | ||
| 19 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +module ietf-network { | ||
| 2 | + yang-version 1; | ||
| 3 | + namespace "urn:ietf:params:xml:ns:yang:ietf-network"; | ||
| 4 | + prefix nd; | ||
| 5 | + container networks { | ||
| 6 | + description | ||
| 7 | + "Serves as top-level container for a list of networks."; | ||
| 8 | + leaf network-id { | ||
| 9 | + type uint8; | ||
| 10 | + description | ||
| 11 | + "Identifies a network."; | ||
| 12 | + } | ||
| 13 | + } | ||
| 14 | + leaf network-ref { | ||
| 15 | + type leafref { | ||
| 16 | + path "../define/network-id"; | ||
| 17 | + } | ||
| 18 | + } | ||
| 19 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +module ietf-network { | ||
| 2 | + yang-version 1; | ||
| 3 | + namespace "urn:ietf:params:xml:ns:yang:ietf-network"; | ||
| 4 | + prefix nd; | ||
| 5 | + container networks { | ||
| 6 | + description | ||
| 7 | + "Serves as top-level container for a list of networks."; | ||
| 8 | + leaf network-id { | ||
| 9 | + type uint8; | ||
| 10 | + description | ||
| 11 | + "Identifies a network."; | ||
| 12 | + } | ||
| 13 | + } | ||
| 14 | + leaf network-ref { | ||
| 15 | + type leafref { | ||
| 16 | + path "../../../define/network-id"; | ||
| 17 | + } | ||
| 18 | + } | ||
| 19 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +module ietf-network { | ||
| 2 | + yang-version 1; | ||
| 3 | + namespace "urn:ietf:params:xml:ns:yang:ietf-network"; | ||
| 4 | + prefix nd; | ||
| 5 | + rpc networks { | ||
| 6 | + description | ||
| 7 | + "Serves as top-level container for a list of networks."; | ||
| 8 | + input { | ||
| 9 | + leaf network-id { | ||
| 10 | + type uint8; | ||
| 11 | + description | ||
| 12 | + "Identifies a network."; | ||
| 13 | + } | ||
| 14 | + } | ||
| 15 | + output { | ||
| 16 | + } | ||
| 17 | + } | ||
| 18 | + leaf network-ref { | ||
| 19 | + type leafref { | ||
| 20 | + path "/networks/input/network-id"; | ||
| 21 | + } | ||
| 22 | + } | ||
| 23 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +module ietf-network { | ||
| 2 | + yang-version 1; | ||
| 3 | + namespace "urn:ietf:params:xml:ns:yang:ietf-network"; | ||
| 4 | + prefix nd; | ||
| 5 | + rpc networks { | ||
| 6 | + description | ||
| 7 | + "Serves as top-level container for a list of networks."; | ||
| 8 | + input { | ||
| 9 | + leaf-list network-id { | ||
| 10 | + type uint8; | ||
| 11 | + description | ||
| 12 | + "Identifies a network."; | ||
| 13 | + } | ||
| 14 | + } | ||
| 15 | + output { | ||
| 16 | + } | ||
| 17 | + } | ||
| 18 | + leaf-list network-ref { | ||
| 19 | + type leafref { | ||
| 20 | + path "/networks/input/network-id"; | ||
| 21 | + } | ||
| 22 | + } | ||
| 23 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +module Test { | ||
| 2 | + yang-version 1; | ||
| 3 | + namespace http://huawei.com; | ||
| 4 | + prefix Ant; | ||
| 5 | + list valid { | ||
| 6 | + key "define"; | ||
| 7 | + leaf define { | ||
| 8 | + type string; | ||
| 9 | + } | ||
| 10 | + container standard { | ||
| 11 | + typedef node { | ||
| 12 | + type leafref { | ||
| 13 | + path "/invalid-interval"; | ||
| 14 | + } | ||
| 15 | + } | ||
| 16 | + container present { | ||
| 17 | + typedef name { | ||
| 18 | + type node; | ||
| 19 | + } | ||
| 20 | + leaf interval { | ||
| 21 | + type name; | ||
| 22 | + } | ||
| 23 | + } | ||
| 24 | + } | ||
| 25 | + } | ||
| 26 | + leaf-list invalid-interval { | ||
| 27 | + type enumeration { | ||
| 28 | + enum 10m; | ||
| 29 | + enum 100m; | ||
| 30 | + enum auto; | ||
| 31 | + } | ||
| 32 | + } | ||
| 33 | +} |
| 1 | +module ietf-network { | ||
| 2 | + yang-version 1; | ||
| 3 | + namespace "urn:ietf:params:xml:ns:yang:ietf-network"; | ||
| 4 | + prefix nd; | ||
| 5 | + rpc networks { | ||
| 6 | + description | ||
| 7 | + "Serves as top-level container for a list of networks."; | ||
| 8 | + input { | ||
| 9 | + leaf-list network-id { | ||
| 10 | + type network-ref; | ||
| 11 | + description | ||
| 12 | + "Identifies a network."; | ||
| 13 | + } | ||
| 14 | + leaf id { | ||
| 15 | + type uint8; | ||
| 16 | + } | ||
| 17 | + } | ||
| 18 | + output { | ||
| 19 | + } | ||
| 20 | + } | ||
| 21 | + typedef network-ref { | ||
| 22 | + type leafref { | ||
| 23 | + path "/networks/input/id"; | ||
| 24 | + } | ||
| 25 | + } | ||
| 26 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
utils/yangutils/plugin/src/test/resources/SelfResolutionWhenLeafrefInTypedefReferToContainer.yang
0 → 100644
| 1 | +module ietf-network { | ||
| 2 | + yang-version 1; | ||
| 3 | + namespace "urn:ietf:params:xml:ns:yang:ietf-network"; | ||
| 4 | + prefix nd; | ||
| 5 | + container networks { | ||
| 6 | + description | ||
| 7 | + "Serves as top-level container for a list of networks."; | ||
| 8 | + leaf network-id { | ||
| 9 | + type network-ref; | ||
| 10 | + description | ||
| 11 | + "Identifies a network."; | ||
| 12 | + } | ||
| 13 | + leaf id { | ||
| 14 | + type uint8; | ||
| 15 | + } | ||
| 16 | + } | ||
| 17 | + typedef network-ref { | ||
| 18 | + type leafref { | ||
| 19 | + path "/networks/id"; | ||
| 20 | + } | ||
| 21 | + } | ||
| 22 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +module ietf-network { | ||
| 2 | + yang-version 1; | ||
| 3 | + namespace "urn:ietf:params:xml:ns:yang:ietf-network"; | ||
| 4 | + prefix nd; | ||
| 5 | + container networks { | ||
| 6 | + description | ||
| 7 | + "Serves as top-level container for a list of networks."; | ||
| 8 | + leaf network-id { | ||
| 9 | + type network-ref; | ||
| 10 | + description | ||
| 11 | + "Identifies a network."; | ||
| 12 | + } | ||
| 13 | + leaf id { | ||
| 14 | + type uint8; | ||
| 15 | + } | ||
| 16 | + } | ||
| 17 | + typedef network-ref { | ||
| 18 | + type leafref { | ||
| 19 | + path "../id"; | ||
| 20 | + } | ||
| 21 | + } | ||
| 22 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +module Test { | ||
| 2 | + yang-version 1; | ||
| 3 | + namespace http://huawei.com; | ||
| 4 | + prefix Ant; | ||
| 5 | + list valid { | ||
| 6 | + key "define"; | ||
| 7 | + leaf define { | ||
| 8 | + type string; | ||
| 9 | + } | ||
| 10 | + container standard { | ||
| 11 | + container present { | ||
| 12 | + leaf name { | ||
| 13 | + type leafref { | ||
| 14 | + path "/invalid-interval"; | ||
| 15 | + } | ||
| 16 | + } | ||
| 17 | + } | ||
| 18 | + } | ||
| 19 | + } | ||
| 20 | + leaf invalid-interval { | ||
| 21 | + type union { | ||
| 22 | + type int32; | ||
| 23 | + type enumeration { | ||
| 24 | + enum "unbounded"; | ||
| 25 | + } | ||
| 26 | + } | ||
| 27 | + } | ||
| 28 | +} |
| 1 | +module Test { | ||
| 2 | + yang-version 1; | ||
| 3 | + namespace http://huawei.com; | ||
| 4 | + prefix Ant; | ||
| 5 | + list valid { | ||
| 6 | + key "define"; | ||
| 7 | + leaf define { | ||
| 8 | + type string; | ||
| 9 | + } | ||
| 10 | + container standard { | ||
| 11 | + container present { | ||
| 12 | + leaf-list name { | ||
| 13 | + type leafref { | ||
| 14 | + path "/invalid-interval"; | ||
| 15 | + } | ||
| 16 | + } | ||
| 17 | + } | ||
| 18 | + } | ||
| 19 | + } | ||
| 20 | + leaf-list invalid-interval { | ||
| 21 | + type enumeration { | ||
| 22 | + enum 10m; | ||
| 23 | + enum 100m; | ||
| 24 | + enum auto; | ||
| 25 | + } | ||
| 26 | + } | ||
| 27 | +} |
utils/yangutils/plugin/src/test/resources/SelfResolutionWhenLeafrefReferToAnotherDerivedType.yang
0 → 100644
| 1 | +module ietf-network { | ||
| 2 | + yang-version 1; | ||
| 3 | + namespace "urn:ietf:params:xml:ns:yang:ietf-network"; | ||
| 4 | + prefix nd; | ||
| 5 | + container networks { | ||
| 6 | + description | ||
| 7 | + "Serves as top-level container for a list of networks."; | ||
| 8 | + leaf network-id { | ||
| 9 | + type status; | ||
| 10 | + description | ||
| 11 | + "Identifies a network."; | ||
| 12 | + } | ||
| 13 | + } | ||
| 14 | + typedef status { | ||
| 15 | + type uint8; | ||
| 16 | + } | ||
| 17 | + leaf network-ref { | ||
| 18 | + type leafref { | ||
| 19 | + path "/networks/network-id"; | ||
| 20 | + } | ||
| 21 | + } | ||
| 22 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
utils/yangutils/plugin/src/test/resources/SelfResolutionWhenLeafrefReferToAnotherLeafref.yang
0 → 100644
| 1 | +module ietf-network { | ||
| 2 | + yang-version 1; | ||
| 3 | + namespace "urn:ietf:params:xml:ns:yang:ietf-network"; | ||
| 4 | + prefix nd; | ||
| 5 | + container networks { | ||
| 6 | + description | ||
| 7 | + "Serves as top-level container for a list of networks."; | ||
| 8 | + leaf network-id { | ||
| 9 | + type leafref { | ||
| 10 | + path "/status/current"; | ||
| 11 | + } | ||
| 12 | + description | ||
| 13 | + "Identifies a network."; | ||
| 14 | + } | ||
| 15 | + } | ||
| 16 | + container status { | ||
| 17 | + leaf current { | ||
| 18 | + type uint8; | ||
| 19 | + } | ||
| 20 | + } | ||
| 21 | + leaf network-ref { | ||
| 22 | + type leafref { | ||
| 23 | + path "/networks/network-id"; | ||
| 24 | + } | ||
| 25 | + } | ||
| 26 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
utils/yangutils/plugin/src/test/resources/SelfResolutionWhenLeafrefReferToContainerLeaf.yang
0 → 100644
| 1 | +module ietf-network { | ||
| 2 | + yang-version 1; | ||
| 3 | + namespace "urn:ietf:params:xml:ns:yang:ietf-network"; | ||
| 4 | + prefix nd; | ||
| 5 | + container networks { | ||
| 6 | + description | ||
| 7 | + "Serves as top-level container for a list of networks."; | ||
| 8 | + leaf network-id { | ||
| 9 | + type uint8; | ||
| 10 | + description | ||
| 11 | + "Identifies a network."; | ||
| 12 | + } | ||
| 13 | + } | ||
| 14 | + leaf network-ref { | ||
| 15 | + type leafref { | ||
| 16 | + path "/networks/network-id"; | ||
| 17 | + } | ||
| 18 | + } | ||
| 19 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
utils/yangutils/plugin/src/test/resources/SelfResolutionWhenLeafrefReferToContainerLeafList.yang
0 → 100644
| 1 | +module ietf-network { | ||
| 2 | + yang-version 1; | ||
| 3 | + namespace "urn:ietf:params:xml:ns:yang:ietf-network"; | ||
| 4 | + prefix nd; | ||
| 5 | + container networks { | ||
| 6 | + description | ||
| 7 | + "Serves as top-level container for a list of networks."; | ||
| 8 | + leaf network-id { | ||
| 9 | + type uint8; | ||
| 10 | + description | ||
| 11 | + "Identifies a network."; | ||
| 12 | + } | ||
| 13 | + } | ||
| 14 | + leaf-list network-ref { | ||
| 15 | + type leafref { | ||
| 16 | + path "/networks/network-id"; | ||
| 17 | + } | ||
| 18 | + } | ||
| 19 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
utils/yangutils/plugin/src/test/resources/SelfResolutionWhenLeafrefReferToContainerLeafRelPath.yang
0 → 100644
| 1 | +module ietf-network { | ||
| 2 | + yang-version 1; | ||
| 3 | + namespace "urn:ietf:params:xml:ns:yang:ietf-network"; | ||
| 4 | + prefix nd; | ||
| 5 | + container networks { | ||
| 6 | + description | ||
| 7 | + "Serves as top-level container for a list of networks."; | ||
| 8 | + leaf network-id { | ||
| 9 | + type uint8; | ||
| 10 | + description | ||
| 11 | + "Identifies a network."; | ||
| 12 | + } | ||
| 13 | + } | ||
| 14 | + leaf network-ref { | ||
| 15 | + type leafref { | ||
| 16 | + path "../networks/network-id"; | ||
| 17 | + } | ||
| 18 | + } | ||
| 19 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +module Test { | ||
| 2 | + yang-version 1; | ||
| 3 | + namespace http://huawei.com; | ||
| 4 | + prefix Ant; | ||
| 5 | + list valid { | ||
| 6 | + key "define"; | ||
| 7 | + leaf define { | ||
| 8 | + type string; | ||
| 9 | + } | ||
| 10 | + container standard { | ||
| 11 | + container present { | ||
| 12 | + leaf-list name { | ||
| 13 | + type transmitter; | ||
| 14 | + } | ||
| 15 | + } | ||
| 16 | + } | ||
| 17 | + } | ||
| 18 | + container reference { | ||
| 19 | + list found { | ||
| 20 | + key "define"; | ||
| 21 | + leaf define { | ||
| 22 | + type string; | ||
| 23 | + } | ||
| 24 | + container reciever { | ||
| 25 | + leaf remove { | ||
| 26 | + type leafref { | ||
| 27 | + path "/valid/standard/present/name"; | ||
| 28 | + } | ||
| 29 | + } | ||
| 30 | + } | ||
| 31 | + } | ||
| 32 | + } | ||
| 33 | + typedef transmitter { | ||
| 34 | + type leafref { | ||
| 35 | + path "/invalid-interval"; | ||
| 36 | + } | ||
| 37 | + } | ||
| 38 | + leaf invalid-interval { | ||
| 39 | + type enumeration { | ||
| 40 | + enum 10m; | ||
| 41 | + enum 100m; | ||
| 42 | + enum auto; | ||
| 43 | + } | ||
| 44 | + } | ||
| 45 | +} |
| 1 | +module Test { | ||
| 2 | + yang-version 1; | ||
| 3 | + namespace http://huawei.com; | ||
| 4 | + prefix Ant; | ||
| 5 | + list valid { | ||
| 6 | + key "define"; | ||
| 7 | + leaf define { | ||
| 8 | + type string; | ||
| 9 | + } | ||
| 10 | + container standard { | ||
| 11 | + container present { | ||
| 12 | + leaf-list name { | ||
| 13 | + type transmitter; | ||
| 14 | + } | ||
| 15 | + } | ||
| 16 | + } | ||
| 17 | + } | ||
| 18 | + container reference { | ||
| 19 | + list found { | ||
| 20 | + key "define"; | ||
| 21 | + leaf define { | ||
| 22 | + type string; | ||
| 23 | + } | ||
| 24 | + container reciever { | ||
| 25 | + leaf remove { | ||
| 26 | + type leafref { | ||
| 27 | + path "../../../../valid/standard/present/name"; | ||
| 28 | + } | ||
| 29 | + } | ||
| 30 | + } | ||
| 31 | + } | ||
| 32 | + } | ||
| 33 | + typedef transmitter { | ||
| 34 | + type leafref { | ||
| 35 | + path "../../../../invalid-interval"; | ||
| 36 | + } | ||
| 37 | + } | ||
| 38 | + leaf invalid-interval { | ||
| 39 | + type enumeration { | ||
| 40 | + enum 10m; | ||
| 41 | + enum 100m; | ||
| 42 | + enum auto; | ||
| 43 | + } | ||
| 44 | + } | ||
| 45 | +} |
utils/yangutils/plugin/src/test/resources/SelfResolutionWhenLeafrefReferToMultipleLeafref.yang
0 → 100644
| 1 | +module Test { | ||
| 2 | + yang-version 1; | ||
| 3 | + namespace http://huawei.com; | ||
| 4 | + prefix Ant; | ||
| 5 | + list valid { | ||
| 6 | + key "define"; | ||
| 7 | + leaf define { | ||
| 8 | + type string; | ||
| 9 | + } | ||
| 10 | + container standard { | ||
| 11 | + container present { | ||
| 12 | + leaf-list name { | ||
| 13 | + type leafref { | ||
| 14 | + path "/transmitter/send"; | ||
| 15 | + } | ||
| 16 | + } | ||
| 17 | + } | ||
| 18 | + } | ||
| 19 | + } | ||
| 20 | + container reference { | ||
| 21 | + list found { | ||
| 22 | + key "define"; | ||
| 23 | + leaf define { | ||
| 24 | + type string; | ||
| 25 | + } | ||
| 26 | + container reciever { | ||
| 27 | + leaf remove { | ||
| 28 | + type leafref { | ||
| 29 | + path "/valid/standard/present/name"; | ||
| 30 | + } | ||
| 31 | + } | ||
| 32 | + } | ||
| 33 | + } | ||
| 34 | + } | ||
| 35 | + list transmitter { | ||
| 36 | + key "send"; | ||
| 37 | + leaf send { | ||
| 38 | + type leafref { | ||
| 39 | + path "/invalid-interval"; | ||
| 40 | + } | ||
| 41 | + } | ||
| 42 | + } | ||
| 43 | + leaf-list invalid-interval { | ||
| 44 | + type enumeration { | ||
| 45 | + enum 10m; | ||
| 46 | + enum 100m; | ||
| 47 | + enum auto; | ||
| 48 | + } | ||
| 49 | + } | ||
| 50 | +} |
| 1 | +module Test { | ||
| 2 | + yang-version 1; | ||
| 3 | + namespace http://huawei.com; | ||
| 4 | + prefix Ant; | ||
| 5 | + list valid { | ||
| 6 | + key "define"; | ||
| 7 | + leaf define { | ||
| 8 | + type string; | ||
| 9 | + } | ||
| 10 | + container standard { | ||
| 11 | + container present { | ||
| 12 | + leaf-list name { | ||
| 13 | + type leafref { | ||
| 14 | + path "../../../../transmitter/send"; | ||
| 15 | + } | ||
| 16 | + } | ||
| 17 | + } | ||
| 18 | + } | ||
| 19 | + } | ||
| 20 | + container reference { | ||
| 21 | + list found { | ||
| 22 | + key "define"; | ||
| 23 | + leaf define { | ||
| 24 | + type string; | ||
| 25 | + } | ||
| 26 | + container reciever { | ||
| 27 | + leaf remove { | ||
| 28 | + type leafref { | ||
| 29 | + path "../../../../valid/standard/present/name"; | ||
| 30 | + } | ||
| 31 | + } | ||
| 32 | + } | ||
| 33 | + } | ||
| 34 | + } | ||
| 35 | + list transmitter { | ||
| 36 | + key "send"; | ||
| 37 | + leaf send { | ||
| 38 | + type leafref { | ||
| 39 | + path "../../invalid-interval"; | ||
| 40 | + } | ||
| 41 | + } | ||
| 42 | + } | ||
| 43 | + leaf-list invalid-interval { | ||
| 44 | + type enumeration { | ||
| 45 | + enum 10m; | ||
| 46 | + enum 100m; | ||
| 47 | + enum auto; | ||
| 48 | + } | ||
| 49 | + } | ||
| 50 | +} |
utils/yangutils/plugin/src/test/resources/SelfResolutionWhenLeafrefReferToMultipleTypedef.yang
0 → 100644
| 1 | +module Test { | ||
| 2 | + yang-version 1; | ||
| 3 | + namespace http://huawei.com; | ||
| 4 | + prefix Ant; | ||
| 5 | + list valid { | ||
| 6 | + key "define"; | ||
| 7 | + leaf define { | ||
| 8 | + type string; | ||
| 9 | + } | ||
| 10 | + container standard { | ||
| 11 | + container present { | ||
| 12 | + leaf-list name { | ||
| 13 | + type transmitter; | ||
| 14 | + } | ||
| 15 | + } | ||
| 16 | + } | ||
| 17 | + } | ||
| 18 | + container reference { | ||
| 19 | + list found { | ||
| 20 | + key "define"; | ||
| 21 | + leaf define { | ||
| 22 | + type string; | ||
| 23 | + } | ||
| 24 | + container reciever { | ||
| 25 | + leaf remove { | ||
| 26 | + type leafref { | ||
| 27 | + path "/valid/standard/present/name"; | ||
| 28 | + } | ||
| 29 | + } | ||
| 30 | + } | ||
| 31 | + } | ||
| 32 | + } | ||
| 33 | + typedef transmitter { | ||
| 34 | + type invalid-interval; | ||
| 35 | + } | ||
| 36 | + typedef invalid-interval { | ||
| 37 | + type enumeration { | ||
| 38 | + enum 10m; | ||
| 39 | + enum 100m; | ||
| 40 | + enum auto; | ||
| 41 | + } | ||
| 42 | + } | ||
| 43 | +} |
| 1 | +module ietf-network { | ||
| 2 | + yang-version 1; | ||
| 3 | + namespace "urn:ietf:params:xml:ns:yang:ietf-network"; | ||
| 4 | + prefix nd; | ||
| 5 | + container networks { | ||
| 6 | + description | ||
| 7 | + "Serves as top-level container for a list of networks."; | ||
| 8 | + leaf network-id { | ||
| 9 | + type uint8; | ||
| 10 | + description | ||
| 11 | + "Identifies a network."; | ||
| 12 | + } | ||
| 13 | + } | ||
| 14 | + leaf network-ref { | ||
| 15 | + type leafref { | ||
| 16 | + path "/define/network-id"; | ||
| 17 | + } | ||
| 18 | + } | ||
| 19 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +module module1 { | ||
| 2 | + yang-version 1; | ||
| 3 | + namespace http://huawei.com; | ||
| 4 | + prefix Ant; | ||
| 5 | + import module2 { | ||
| 6 | + prefix p; | ||
| 7 | + } | ||
| 8 | + leaf invalid-interval { | ||
| 9 | + type leafref { | ||
| 10 | + path "/p:hello"; | ||
| 11 | + } | ||
| 12 | + } | ||
| 13 | + leaf hello { | ||
| 14 | + type string; | ||
| 15 | + } | ||
| 16 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
utils/yangutils/plugin/src/test/resources/interfileleafreffromgroupingreferstootherfile/module1.yang
0 → 100644
| 1 | +module module1 { | ||
| 2 | + yang-version 1; | ||
| 3 | + namespace "urn:ietf:params:xml:ns:yang:ietf-te-topology"; | ||
| 4 | + prefix "tet"; | ||
| 5 | + import module2 { | ||
| 6 | + prefix "nt"; | ||
| 7 | + } | ||
| 8 | + grouping te-node-tunnel-termination-capability { | ||
| 9 | + description | ||
| 10 | + "Termination capability of a tunnel termination point on a | ||
| 11 | + TE node."; | ||
| 12 | + list termination-capability { | ||
| 13 | + key "link-tp"; | ||
| 14 | + description | ||
| 15 | + "The termination capabilities between | ||
| 16 | + tunnel-termination-point and link termination-point. | ||
| 17 | + The capability information can be used to compute | ||
| 18 | + the tunnel path."; | ||
| 19 | + leaf link-tp { | ||
| 20 | + type leafref { | ||
| 21 | + path "/nt:termination-point/nt:tp-id"; | ||
| 22 | + } | ||
| 23 | + description | ||
| 24 | + "Link termination point."; | ||
| 25 | + } | ||
| 26 | + } // termination-capability | ||
| 27 | + } // te-node-tunnel-termination-capability | ||
| 28 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +module ietf-network-topology { | ||
| 2 | + yang-version 1; | ||
| 3 | + namespace "urn:ietf:params:xml:ns:yang:ietf-te-topology"; | ||
| 4 | + prefix "tet"; | ||
| 5 | + import ietf-network { | ||
| 6 | + prefix "nt"; | ||
| 7 | + } | ||
| 8 | + grouping te-node-tunnel-termination-capability { | ||
| 9 | + description | ||
| 10 | + "Termination capability of a tunnel termination point on a | ||
| 11 | + TE node."; | ||
| 12 | + list termination-capability { | ||
| 13 | + key "link-tp"; | ||
| 14 | + description | ||
| 15 | + "The termination capabilities between | ||
| 16 | + tunnel-termination-point and link termination-point. | ||
| 17 | + The capability information can be used to compute | ||
| 18 | + the tunnel path."; | ||
| 19 | + leaf link-tp { | ||
| 20 | + type leafref { | ||
| 21 | + path "/nt:termination-point/nt:tp-id"; | ||
| 22 | + } | ||
| 23 | + description | ||
| 24 | + "Link termination point."; | ||
| 25 | + } | ||
| 26 | + } // termination-capability | ||
| 27 | + } // te-node-tunnel-termination-capability | ||
| 28 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +module ietf-network { | ||
| 2 | + yang-version 1; | ||
| 3 | + namespace | ||
| 4 | + "urn:ietf:params:xml:ns:yang:ietf-inet-types"; | ||
| 5 | + prefix nw; | ||
| 6 | + import ietf-inet-types { | ||
| 7 | + prefix inet; | ||
| 8 | + } | ||
| 9 | + container termination-point { | ||
| 10 | + leaf tp-id { | ||
| 11 | + type string; | ||
| 12 | + } | ||
| 13 | + } | ||
| 14 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +module ietf-network { | ||
| 2 | + yang-version 1; | ||
| 3 | + namespace "urn:ietf:params:xml:ns:yang:ietf-network"; | ||
| 4 | + prefix nd; | ||
| 5 | + container networks { | ||
| 6 | + description | ||
| 7 | + "Serves as top-level container for a list of networks."; | ||
| 8 | + leaf network-id { | ||
| 9 | + type status; | ||
| 10 | + description | ||
| 11 | + "Identifies a network."; | ||
| 12 | + } | ||
| 13 | + } | ||
| 14 | + typedef status { | ||
| 15 | + type uint8; | ||
| 16 | + } | ||
| 17 | + leaf network-ref { | ||
| 18 | + type leafref { | ||
| 19 | + path "/networks"; | ||
| 20 | + } | ||
| 21 | + } | ||
| 22 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
-
Please register or login to post a comment