[ONOS-4348] Yang Bits, Binary and Decimal64
Change-Id: I8e4e54a19a8f9634cbc56a07579a1730174f53f6
diff --git a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/RangeRestrictionListener.java b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/RangeRestrictionListener.java
index 9c2a4bd..3b4ae43 100644
--- a/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/RangeRestrictionListener.java
+++ b/utils/yangutils/plugin/src/main/java/org/onosproject/yangutils/parser/impl/listeners/RangeRestrictionListener.java
@@ -16,6 +16,7 @@
package org.onosproject.yangutils.parser.impl.listeners;
+import org.onosproject.yangutils.datamodel.YangDecimal64;
import org.onosproject.yangutils.datamodel.YangDerivedInfo;
import org.onosproject.yangutils.datamodel.YangRangeRestriction;
import org.onosproject.yangutils.datamodel.YangType;
@@ -25,6 +26,7 @@
import org.onosproject.yangutils.parser.exceptions.ParserException;
import org.onosproject.yangutils.parser.impl.TreeWalkListener;
+import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.DECIMAL64;
import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypeUtils.isOfRangeRestrictedType;
import static org.onosproject.yangutils.datamodel.utils.RestrictionResolver.processRangeRestriction;
@@ -112,7 +114,7 @@
return;
}
- if (!(isOfRangeRestrictedType(type.getDataType()))) {
+ if (!(isOfRangeRestrictedType(type.getDataType())) && (type.getDataType() != DECIMAL64)) {
ParserException parserException = new ParserException("YANG file error: Range restriction can't be " +
"applied to a given type");
parserException.setLine(ctx.getStart().getLine());
@@ -122,8 +124,17 @@
YangRangeRestriction rangeRestriction = null;
try {
- rangeRestriction = processRangeRestriction(null, ctx.getStart().getLine(),
- ctx.getStart().getCharPositionInLine(), false, ctx.range().getText(), type.getDataType());
+ if (type.getDataType() == DECIMAL64) {
+ YangDecimal64 yangDecimal64 = (YangDecimal64) type.getDataTypeExtendedInfo();
+ rangeRestriction = processRangeRestriction(yangDecimal64.getDefaultRangeRestriction(),
+ ctx.getStart().getLine(),
+ ctx.getStart().getCharPositionInLine(),
+ true, ctx.range().getText(), type.getDataType());
+ } else {
+ rangeRestriction = processRangeRestriction(null, ctx.getStart().getLine(),
+ ctx.getStart().getCharPositionInLine(),
+ false, ctx.range().getText(), type.getDataType());
+ }
} catch (DataModelException e) {
ParserException parserException = new ParserException(e.getMessage());
parserException.setCharPosition(e.getCharPositionInLine());
@@ -132,7 +143,12 @@
}
if (rangeRestriction != null) {
- type.setDataTypeExtendedInfo(rangeRestriction);
+ if (type.getDataType() == DECIMAL64) {
+ ((YangDecimal64<YangRangeRestriction>) type.getDataTypeExtendedInfo())
+ .setRangeRestrictedExtendedInfo(rangeRestriction);
+ } else {
+ type.setDataTypeExtendedInfo(rangeRestriction);
+ }
}
listener.getParsedDataStack().push(rangeRestriction);
}