import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition;
import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition;
import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil;
+import org.opendaylight.yangtools.yang.model.util.SchemaNodeUtils;
/**
* Helper util class used for generation of types in Binding spec v2.
resolveLeafListSchemaNode(schemaContext, typeBuilder, (LeafListSchemaNode) node, module,
typeProvider, genCtx);
} else if (node instanceof LeafSchemaNode) {
- resolveLeafSchemaNodeAsMethod(schemaContext, typeBuilder, genCtx, (LeafSchemaNode) node, module,
+ resolveLeafSchemaNodeAsMethod("", schemaContext, typeBuilder, genCtx, (LeafSchemaNode) node, module,
typeProvider);
} else if (node instanceof ListSchemaNode) {
listToGenType(module, basePackageName, typeBuilder, childOf, (ListSchemaNode) node, schemaContext,
parent, final GeneratedTypeBuilder childOf, final ListSchemaNode node, final SchemaContext schemaContext,
final boolean verboseClassComments, final Map<Module, ModuleContext> genCtx,
final Map<String, Map<String, GeneratedTypeBuilder>> genTypeBuilders, final TypeProvider typeProvider) {
+
final GeneratedTypeBuilder genType = processDataSchemaNode(module, basePackageName, childOf, node,
schemaContext, verboseClassComments, genCtx, genTypeBuilders, typeProvider);
if (genType != null) {
final String nodeName = node.getQName().getLocalName();
- constructGetter(parent, nodeName, node.getDescription(),
- Types.listTypeFor(genType), node.getStatus());
+ constructGetter(parent, nodeName, node.getDescription(), Types.listTypeFor(genType), node.getStatus());
final List<QName> listKeys = node.getKeyDefinition();
final String packageName = new StringBuilder(packageNameForGeneratedType(basePackageName, node.getPath(),
BindingNamespaceType.Key)).append('.').append(nodeName).toString();
* <li>true - in other cases</li>
* </ul>
*/
- private static Type resolveLeafSchemaNodeAsMethod(final SchemaContext schemaContext, final GeneratedTypeBuilder
- typeBuilder, final Map<Module, ModuleContext> genCtx, final LeafSchemaNode leaf, final Module module,
- final TypeProvider typeProvider) {
+ private static Type resolveLeafSchemaNodeAsMethod(final String nodeName, final SchemaContext schemaContext,
+ final GeneratedTypeBuilder typeBuilder, final Map<Module, ModuleContext> genCtx, final LeafSchemaNode leaf,
+ final Module module, final TypeProvider typeProvider) {
if (leaf == null || typeBuilder == null || leaf.isAddedByUses()) {
return null;
}
leafDesc = "";
}
- constructGetter(typeBuilder, leafName, leafDesc, returnType, leaf.getStatus());
+ final String leafGetterName;
+ if (!"".equals(nodeName)) {
+ StringBuilder sb = new StringBuilder(nodeName)
+ .append('_')
+ .append(leafName);
+ leafGetterName = sb.toString();
+ } else {
+ leafGetterName = leafName;
+ }
+
+ constructGetter(typeBuilder, leafGetterName, leafDesc, returnType, leaf.getStatus());
return returnType;
}
if (schemaNode instanceof LeafSchemaNode) {
final LeafSchemaNode leaf = (LeafSchemaNode) schemaNode;
final QName leafQName = leaf.getQName();
- final String leafName = leafQName.getLocalName();
- String leafPckgName = basePackageName;
- boolean isKeyPart = false;
- if (listKeys.contains(leafQName)) {
- leafPckgName = new StringBuilder(leafPckgName).append('.').append(BindingNamespaceType.Key).append('.')
- .append(nodeName).toString();
- isKeyPart = true;
- } else {
- leafPckgName = new StringBuilder(leafPckgName).append('.').append(BindingNamespaceType.Data).append('.')
- .append(nodeName).toString();
- }
- final String leafGTOName = new StringBuilder(nodeName).append('_').append(leafName).toString();
- final GeneratedTypeBuilder leafGTp = new GeneratedTypeBuilderImpl(leafPckgName, leafGTOName);
- resolveLeafSchemaNodeAsMethod(schemaContext, leafGTp, genCtx, leaf, module,
+ final Type type = resolveLeafSchemaNodeAsMethod(nodeName, schemaContext, typeBuilder, genCtx, leaf, module,
typeProvider);
-
- constructGetter(typeBuilder, leafGTOName, schemaNode.getDescription(), leafGTp, Status.CURRENT);
-
- if (isKeyPart) {
- AuxiliaryGenUtils.resolveLeafSchemaNodeAsProperty(genTOBuilder, leaf, leafGTp, true);
+ if (listKeys.contains(leafQName)) {
+ if (type == null) {
+ resolveLeafSchemaNodeAsProperty(schemaContext, typeProvider, genCtx, genTOBuilder, leaf, true,
+ module);
+ } else {
+ AuxiliaryGenUtils.resolveLeafSchemaNodeAsProperty(genTOBuilder, leaf, type, true);
+ }
}
} else if (!schemaNode.isAddedByUses()) {
if (schemaNode instanceof LeafListSchemaNode) {
}
}
+ private static boolean resolveLeafSchemaNodeAsProperty(final SchemaContext schemaContext, final TypeProvider
+ typeProvider, final Map<Module, ModuleContext> genCtx, final GeneratedTOBuilder
+ toBuilder, final LeafSchemaNode leaf, final boolean isReadOnly, final Module module) {
+
+ if (leaf != null && toBuilder != null) {
+ Type returnType;
+ final TypeDefinition<?> typeDef = leaf.getType();
+ if (typeDef instanceof UnionTypeDefinition) {
+ // GeneratedType for this type definition should be already
+ // created
+ final QName qname = typeDef.getQName();
+ final Module unionModule = schemaContext.findModuleByNamespaceAndRevision(qname.getNamespace(),
+ qname.getRevision());
+ final ModuleContext mc = genCtx.get(unionModule);
+ returnType = mc.getTypedefs().get(typeDef.getPath());
+ } else if (typeDef instanceof EnumTypeDefinition && typeDef.getBaseType() == null) {
+ // Annonymous enumeration (already generated, since it is inherited via uses).
+ LeafSchemaNode originalLeaf = (LeafSchemaNode) SchemaNodeUtils.getRootOriginalIfPossible(leaf);
+ QName qname = originalLeaf.getQName();
+ final Module enumModule = schemaContext.findModuleByNamespaceAndRevision(qname.getNamespace(),
+ qname.getRevision());
+ returnType = genCtx.get(enumModule).getInnerType(originalLeaf.getType().getPath());
+ } else {
+ returnType = typeProvider.javaTypeForSchemaDefinitionType(typeDef, leaf);
+ }
+ return AuxiliaryGenUtils.resolveLeafSchemaNodeAsProperty(toBuilder, leaf, returnType, isReadOnly);
+ }
+ return false;
+ }
+
private static TypeDefinition<?> getBaseOrDeclaredType(final TypeDefinition<?> typeDef) {
final TypeDefinition<?> baseType = typeDef.getBaseType();
return (baseType != null && baseType.getBaseType() != null) ? baseType : typeDef;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+
import java.util.List;
import org.junit.Test;
import org.opendaylight.mdsal.binding.javav2.generator.api.BindingGenerator;
if (t instanceof GeneratedTransferObject) {
final GeneratedTransferObject genTransferObj = (GeneratedTransferObject) t;
assertBaseGeneratedType(genTransferObj, "MyListKey",
- "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list.wrapper");
+ "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list");
assertEquals(3, genTransferObj.getProperties().size());
int test_j = 0;
for (final GeneratedProperty generatedProperty : genTransferObj.getProperties()) {
switch (generatedProperty.getName()) {
case "key":
- assertEquals("MyListKey", generatedProperty.getReturnType().getName());
+ assertEquals("String", generatedProperty.getReturnType().getName());
test_j++;
break;
case "key1":
- assertEquals("MyListKey1", generatedProperty.getReturnType().getName());
+ assertEquals("String", generatedProperty.getReturnType().getName());
test_j++;
break;
case "key2":
- assertEquals("MyListKey2", generatedProperty.getReturnType().getName());
+ assertEquals("String", generatedProperty.getReturnType().getName());
test_j++;
break;
default:
switch (m.getName()) {
case "getKey":
assertMethod(t, "getKey", "MyListKey",
- "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list.wrapper",
+ "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
m);
test_j++;
break;
case "getMyListKey1":
- assertMethod(t, "getMyListKey1", "MyListKey1",
- "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
- m);
+ assertMethod(t, "getMyListKey1", "String","java.lang", m);
test_j++;
break;
case "getMyListKey2":
- assertMethod(t, "getMyListKey2", "MyListKey2",
- "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
- m);
+ assertMethod(t, "getMyListKey2", "String","java.lang", m);
test_j++;
break;
case "getMyListFoo":
- assertMethod(t, "getMyListFoo", "MyListFoo",
- "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.data.my_list",
- m);
+ assertMethod(t, "getMyListFoo", "String","java.lang", m);
test_j++;
break;
case "getMyListKey":
- assertMethod(t, "getMyListKey", "MyListKey",
- "org.opendaylight.mdsal.gen.javav2.urn.test.simple.test.list.rev170314.key.my_list",
- m);
+ assertMethod(t, "getMyListKey", "String","java.lang", m);
test_j++;
break;
default: