[ONOS-5589] empty type defect fix
Change-Id: I31b0bd078c9d5dce47da133787d9535dc0f36fed
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangDecimal64.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangDecimal64.java
index 58fd8ce..c61c69d 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangDecimal64.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangDecimal64.java
@@ -271,10 +271,8 @@
} else {
// Check value is in fraction-digits decimal64 value range
if (!FractionDigits.isValueInDecimal64Range(value, getFractionDigit())) {
- throw new DataModelException(getErrorMsg(
- "YANG file error : decimal64 validation failed.", "decimal64",
- getLineNumber(), getCharPosition(), getFileName() + "\""));
-
+ throw new DataModelException(
+ "YANG file error : value is not in decimal64 range.");
}
}
}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeaf.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeaf.java
index 28aceec..f8ebda1 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeaf.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeaf.java
@@ -25,6 +25,8 @@
import java.util.List;
import java.util.Map;
+import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.validateEmptyDataType;
+
/*
* Reference:RFC 6020.
* The "leaf" statement is used to define a leaf node in the schema
@@ -312,6 +314,11 @@
return dataType;
}
+ @Override
+ public boolean isEmptyDataType() {
+ return validateEmptyDataType(dataType);
+ }
+
/**
* Sets the data type.
*
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeafList.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeafList.java
index b7f6931..ab1b468 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeafList.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeafList.java
@@ -16,13 +16,16 @@
package org.onosproject.yangutils.datamodel;
+import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
+import org.onosproject.yangutils.datamodel.utils.Parsable;
+import org.onosproject.yangutils.datamodel.utils.YangConstructType;
+
import java.io.Serializable;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
+
+import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.validateEmptyDataType;
/*
* Reference:RFC 6020.
@@ -329,6 +332,11 @@
return dataType;
}
+ @Override
+ public boolean isEmptyDataType() {
+ return validateEmptyDataType(dataType);
+ }
+
/**
* Sets the data type.
*
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNode.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNode.java
index 26fcbd4..bc665ff 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNode.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNode.java
@@ -690,6 +690,12 @@
throw new DataModelException("Method is called for node other than module/sub-module.");
}
+ @Override
+ public boolean isEmptyDataType() throws DataModelException {
+ throw new DataModelException("Method is called for node other than " +
+ "leaf/leaf-list.");
+ }
+
/**
* Adds child schema in child schema map, this is used to add the schema
* to the map in case of leaf as a child.
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNode.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNode.java
index 8489d73..b138fc1 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNode.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNode.java
@@ -146,4 +146,13 @@
* @return referred schema node
*/
YangSchemaNode getReferredSchema();
+
+ /**
+ * Checks for the presence of empty data-type in requested schema node.
+ * Exception will be thrown if this is called for other then leaf/leaf-list
+ * node type.
+ *
+ * @return true if empty data-type is present, false otherwise
+ */
+ boolean isEmptyDataType() throws DataModelException;
}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/DataModelUtils.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/DataModelUtils.java
index c169250..67e05b7 100644
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/DataModelUtils.java
+++ b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/DataModelUtils.java
@@ -22,6 +22,7 @@
import org.onosproject.yangutils.datamodel.YangAugment;
import org.onosproject.yangutils.datamodel.YangBase;
import org.onosproject.yangutils.datamodel.YangCompilerAnnotation;
+import org.onosproject.yangutils.datamodel.YangDerivedInfo;
import org.onosproject.yangutils.datamodel.YangEntityToResolveInfoImpl;
import org.onosproject.yangutils.datamodel.YangEnumeration;
import org.onosproject.yangutils.datamodel.YangIdentityRef;
@@ -59,6 +60,8 @@
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
+import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.EMPTY;
+
/**
* Represents utilities for data model tree.
*/
@@ -808,4 +811,35 @@
jar.close();
return nodes;
}
+
+ /**
+ * Validates the requested data-type resolve type in empty or not.
+ *
+ * @param dataType the data type
+ * @return true, for empty resolved data-type; false otherwise
+ */
+ public static boolean validateEmptyDataType(YangType dataType) {
+ switch (dataType.getDataType()) {
+ case DERIVED:
+ return ((YangDerivedInfo) dataType.getDataTypeExtendedInfo())
+ .getEffectiveBuiltInType().equals(EMPTY);
+
+ case LEAFREF:
+ YangType type = ((YangLeafRef) dataType
+ .getDataTypeExtendedInfo())
+ .getEffectiveDataType();
+ if (type.getDataType() == YangDataTypes.DERIVED) {
+ return ((YangDerivedInfo) type.getDataTypeExtendedInfo())
+ .getEffectiveBuiltInType().equals(EMPTY);
+ }
+ return ((YangLeafRef) dataType.getDataTypeExtendedInfo())
+ .getEffectiveDataType().getDataType().equals(EMPTY);
+
+ case UNION:
+ return ((YangUnion) dataType.getDataTypeExtendedInfo())
+ .getTypeList().contains(EMPTY);
+ default:
+ return dataType.getDataType().equals(EMPTY);
+ }
+ }
}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/Decimal64ListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/Decimal64ListenerTest.java
index 30e61e3..9a0373e 100644
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/Decimal64ListenerTest.java
+++ b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/Decimal64ListenerTest.java
@@ -156,7 +156,8 @@
@Test
public void processDecimal64ValueFailureValidation() throws IOException, ParserException, DataModelException {
thrown.expect(DataModelException.class);
- thrown.expectMessage("YANG file error : decimal64 validation failed.");
+ thrown.expectMessage(
+ "YANG file error : value is not in decimal64 range.");
YangNode node = manager.getDataModel("src/test/resources/decimal64/Decimal64TypeValidation.yang");