[ONOS-4744] Leafref implementation and UT
Change-Id: I151797185e0bb1695c0640b667ae76ef87c4d4b0
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/AttributesJavaDataType.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/AttributesJavaDataType.java
index 4d7c9fc..6df66af 100644
--- a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/AttributesJavaDataType.java
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/AttributesJavaDataType.java
@@ -17,13 +17,15 @@
package org.onosproject.yangutils.translator.tojava.javamodel;
import java.util.Stack;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
+
import org.onosproject.yangutils.datamodel.YangDerivedInfo;
import org.onosproject.yangutils.datamodel.YangEnumeration;
+import org.onosproject.yangutils.datamodel.YangLeafRef;
import org.onosproject.yangutils.datamodel.YangNode;
import org.onosproject.yangutils.datamodel.YangType;
import org.onosproject.yangutils.datamodel.YangTypeDef;
import org.onosproject.yangutils.datamodel.YangUnion;
+import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
import org.onosproject.yangutils.translator.exception.TranslatorException;
import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
@@ -101,6 +103,10 @@
return STRING_DATA_TYPE;
case BOOLEAN:
return BOOLEAN_DATA_TYPE;
+ case INSTANCE_IDENTIFIER:
+ return STRING_DATA_TYPE;
+ case LEAFREF:
+ return getJavaDataType(getReferredTypeFromLeafref(yangType));
default:
throw new TranslatorException("given data type is not supported.");
}
@@ -152,8 +158,8 @@
case BINARY:
return YANG_BINARY_CLASS;
case LEAFREF:
- //TODO:LEAFREF
- break;
+ YangType<?> referredType = getReferredTypeFromLeafref(yangType);
+ return getJavaImportClass(referredType, isListAttr, pluginConfig);
case IDENTITYREF:
//TODO:IDENTITYREF
break;
@@ -163,8 +169,7 @@
return getCapitalCase(getCamelCase(((YangJavaUnion) yangType.getDataTypeExtendedInfo()).getName(),
pluginConfig));
case INSTANCE_IDENTIFIER:
- //TODO:INSTANCE_IDENTIFIER
- break;
+ return STRING_DATA_TYPE;
case DERIVED:
return getCapitalCase(
getCamelCase(yangType.getDataTypeName(), pluginConfig));
@@ -188,8 +193,8 @@
case BINARY:
return YANG_BINARY_CLASS;
case LEAFREF:
- //TODO:LEAFREF
- break;
+ YangType<?> referredType = getReferredTypeFromLeafref(yangType);
+ return getJavaImportClass(referredType, isListAttr, pluginConfig);
case IDENTITYREF:
//TODO:IDENTITYREF
break;
@@ -199,8 +204,7 @@
return getCapitalCase(getCamelCase(((YangJavaUnion) yangType.getDataTypeExtendedInfo()).getName(),
pluginConfig));
case INSTANCE_IDENTIFIER:
- //TODO:INSTANCE_IDENTIFIER
- break;
+ return STRING_DATA_TYPE;
case DERIVED:
return getCapitalCase(
getCamelCase(yangType.getDataTypeName(), pluginConfig));
@@ -246,16 +250,15 @@
case BINARY:
return YANG_TYPES_PKG;
case LEAFREF:
- //TODO:LEAFREF
- break;
+ YangType<?> referredType = getReferredTypeFromLeafref(yangType);
+ return getJavaImportPackage(referredType, isListAttr, conflictResolver);
case IDENTITYREF:
//TODO:IDENTITYREF
break;
case UNION:
return getUnionPackage(yangType, conflictResolver);
case INSTANCE_IDENTIFIER:
- //TODO:INSTANCE_IDENTIFIER
- break;
+ return JAVA_LANG;
case DERIVED:
return getTypDefsPackage(yangType, conflictResolver);
default:
@@ -274,8 +277,8 @@
case BINARY:
return YANG_TYPES_PKG;
case LEAFREF:
- //TODO:LEAFREF
- break;
+ YangType<?> referredType = getReferredTypeFromLeafref(yangType);
+ return getJavaImportPackage(referredType, isListAttr, conflictResolver);
case IDENTITYREF:
//TODO:IDENTITYREF
break;
@@ -284,8 +287,7 @@
case UNION:
return getUnionPackage(yangType, conflictResolver);
case INSTANCE_IDENTIFIER:
- //TODO:INSTANCE_IDENTIFIER
- break;
+ return JAVA_LANG;
case DERIVED:
return getTypDefsPackage(yangType, conflictResolver);
default:
@@ -444,4 +446,15 @@
.getPackage()));
}
}
+
+ /**
+ * Returns the referred type from leaf/leaf-list.
+ *
+ * @param type current type in leaf
+ * @return type from the leafref
+ */
+ private static YangType<?> getReferredTypeFromLeafref(YangType type) {
+ YangLeafRef<?> leafRefInfo = (YangLeafRef<?>) type.getDataTypeExtendedInfo();
+ return leafRefInfo.getEffectiveDataType();
+ }
}