We need this ability to generate RpcOutput-compliant containers.
Change-Id: I8cb7f4ba3771bac07298fda59403d0ff8167aa8d
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
+import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.mdsal.binding.model.api.AccessModifier;
import org.opendaylight.mdsal.binding.model.api.Constant;
import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject;
import org.opendaylight.mdsal.binding.model.api.AccessModifier;
import org.opendaylight.mdsal.binding.model.api.Constant;
import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject;
- private GeneratedTypeBuilder processDataSchemaNode(final ModuleContext context, final Type childOf,
+ private GeneratedTypeBuilder processDataSchemaNode(final ModuleContext context, final Type baseInterface,
final DataSchemaNode node) {
if (node.isAugmenting() || node.isAddedByUses()) {
return null;
}
final DataSchemaNode node) {
if (node.isAugmenting() || node.isAddedByUses()) {
return null;
}
- final GeneratedTypeBuilder genType = addDefaultInterfaceDefinition(context, node, childOf);
+ final GeneratedTypeBuilder genType = addDefaultInterfaceDefinition(context, node, baseInterface);
annotateDeprecatedIfNecessary(node.getStatus(), genType);
final Module module = context.module();
annotateDeprecatedIfNecessary(node.getStatus(), genType);
final Module module = context.module();
}
private void containerToGenType(final ModuleContext context, final GeneratedTypeBuilder parent,
}
private void containerToGenType(final ModuleContext context, final GeneratedTypeBuilder parent,
- final Type childOf, final ContainerSchemaNode node) {
- final GeneratedTypeBuilder genType = processDataSchemaNode(context, childOf, node);
+ final Type baseInterface, final ContainerSchemaNode node) {
+ final GeneratedTypeBuilder genType = processDataSchemaNode(context, baseInterface, node);
if (genType != null) {
constructGetter(parent, genType, node);
resolveDataSchemaNodes(context, genType, genType, node.getChildNodes());
}
}
if (genType != null) {
constructGetter(parent, genType, node);
resolveDataSchemaNodes(context, genType, genType, node.getChildNodes());
}
}
- private void listToGenType(final ModuleContext context, final GeneratedTypeBuilder parent, final Type childOf,
- final ListSchemaNode node) {
- final GeneratedTypeBuilder genType = processDataSchemaNode(context, childOf, node);
+ private void listToGenType(final ModuleContext context, final GeneratedTypeBuilder parent,
+ final Type baseInterface, final ListSchemaNode node) {
+ final GeneratedTypeBuilder genType = processDataSchemaNode(context, baseInterface, node);
if (genType != null) {
constructGetter(parent, Types.listTypeFor(genType), node);
if (genType != null) {
constructGetter(parent, Types.listTypeFor(genType), node);
processUsesAugments(notification, context);
final GeneratedTypeBuilder notificationInterface = addDefaultInterfaceDefinition(
processUsesAugments(notification, context);
final GeneratedTypeBuilder notificationInterface = addDefaultInterfaceDefinition(
- context.modulePackageName(), notification, null, context);
+ context.modulePackageName(), notification, DATA_OBJECT, context);
annotateDeprecatedIfNecessary(notification.getStatus(), notificationInterface);
notificationInterface.addImplementsType(NOTIFICATION);
context.addChildNodeType(notification, notificationInterface);
annotateDeprecatedIfNecessary(notification.getStatus(), notificationInterface);
notificationInterface.addImplementsType(NOTIFICATION);
context.addChildNodeType(notification, notificationInterface);
annotateDeprecatedIfNecessary(augSchema.getStatus(), augTypeBuilder);
addImplementedInterfaceFromUses(augSchema, augTypeBuilder);
annotateDeprecatedIfNecessary(augSchema.getStatus(), augTypeBuilder);
addImplementedInterfaceFromUses(augSchema, augTypeBuilder);
- augSchemaNodeToMethods(context, augTypeBuilder, augTypeBuilder, augSchema.getChildNodes());
+ augSchemaNodeToMethods(context, augTypeBuilder, augSchema.getChildNodes());
augmentBuilders.put(augTypeName, augTypeBuilder);
if (!augSchema.getChildNodes().isEmpty()) {
augmentBuilders.put(augTypeName, augTypeBuilder);
if (!augSchema.getChildNodes().isEmpty()) {
* added to it.
*/
private GeneratedTypeBuilder resolveDataSchemaNodes(final ModuleContext context, final GeneratedTypeBuilder parent,
* added to it.
*/
private GeneratedTypeBuilder resolveDataSchemaNodes(final ModuleContext context, final GeneratedTypeBuilder parent,
- final Type childOf, final Iterable<DataSchemaNode> schemaNodes) {
+ final @Nullable Type childOf, final Iterable<DataSchemaNode> schemaNodes) {
if (schemaNodes != null && parent != null) {
if (schemaNodes != null && parent != null) {
+ final Type baseInterface = childOf == null ? DATA_OBJECT : childOf(childOf);
for (final DataSchemaNode schemaNode : schemaNodes) {
if (!schemaNode.isAugmenting() && !schemaNode.isAddedByUses()) {
for (final DataSchemaNode schemaNode : schemaNodes) {
if (!schemaNode.isAugmenting() && !schemaNode.isAddedByUses()) {
- addSchemaNodeToBuilderAsMethod(context, schemaNode, parent, childOf);
+ addSchemaNodeToBuilderAsMethod(context, schemaNode, parent, baseInterface);
* added to it.
*/
private GeneratedTypeBuilder augSchemaNodeToMethods(final ModuleContext context,
* added to it.
*/
private GeneratedTypeBuilder augSchemaNodeToMethods(final ModuleContext context,
- final GeneratedTypeBuilder typeBuilder, final Type childOf, final Iterable<DataSchemaNode> schemaNodes) {
+ final GeneratedTypeBuilder typeBuilder, final Iterable<DataSchemaNode> schemaNodes) {
if (schemaNodes != null && typeBuilder != null) {
if (schemaNodes != null && typeBuilder != null) {
+ final Type baseInterface = childOf(typeBuilder);
for (final DataSchemaNode schemaNode : schemaNodes) {
if (!schemaNode.isAugmenting()) {
for (final DataSchemaNode schemaNode : schemaNodes) {
if (!schemaNode.isAugmenting()) {
- addSchemaNodeToBuilderAsMethod(context, schemaNode, typeBuilder, childOf);
+ addSchemaNodeToBuilderAsMethod(context, schemaNode, typeBuilder, baseInterface);
* current module
*/
private void addSchemaNodeToBuilderAsMethod(final ModuleContext context, final DataSchemaNode node,
* current module
*/
private void addSchemaNodeToBuilderAsMethod(final ModuleContext context, final DataSchemaNode node,
- final GeneratedTypeBuilder typeBuilder, final Type childOf) {
+ final GeneratedTypeBuilder typeBuilder, final Type baseInterface) {
if (node != null && typeBuilder != null) {
if (node instanceof LeafSchemaNode) {
resolveLeafSchemaNodeAsMethod(typeBuilder, (LeafSchemaNode) node, context);
} else if (node instanceof LeafListSchemaNode) {
resolveLeafListSchemaNode(typeBuilder, (LeafListSchemaNode) node, context);
} else if (node instanceof ContainerSchemaNode) {
if (node != null && typeBuilder != null) {
if (node instanceof LeafSchemaNode) {
resolveLeafSchemaNodeAsMethod(typeBuilder, (LeafSchemaNode) node, context);
} else if (node instanceof LeafListSchemaNode) {
resolveLeafListSchemaNode(typeBuilder, (LeafListSchemaNode) node, context);
} else if (node instanceof ContainerSchemaNode) {
- containerToGenType(context, typeBuilder, childOf, (ContainerSchemaNode) node);
+ containerToGenType(context, typeBuilder, baseInterface, (ContainerSchemaNode) node);
} else if (node instanceof ListSchemaNode) {
} else if (node instanceof ListSchemaNode) {
- listToGenType(context, typeBuilder, childOf, (ListSchemaNode) node);
+ listToGenType(context, typeBuilder, baseInterface, (ListSchemaNode) node);
} else if (node instanceof ChoiceSchemaNode) {
choiceToGeneratedType(context, typeBuilder, (ChoiceSchemaNode) node);
} else {
} else if (node instanceof ChoiceSchemaNode) {
choiceToGeneratedType(context, typeBuilder, (ChoiceSchemaNode) node);
} else {
final GeneratedTypeBuilder caseTypeBuilder = addDefaultInterfaceDefinition(context, caseNode);
caseTypeBuilder.addImplementsType(targetType);
final GeneratedTypeBuilder caseTypeBuilder = addDefaultInterfaceDefinition(context, caseNode);
caseTypeBuilder.addImplementsType(targetType);
- final Type childOfType = findChildOfType(targetNode);
CaseSchemaNode node = null;
final String caseLocalName = caseNode.getQName().getLocalName();
if (caseNode instanceof CaseSchemaNode) {
CaseSchemaNode node = null;
final String caseLocalName = caseNode.getQName().getLocalName();
if (caseNode instanceof CaseSchemaNode) {
}
final Iterable<DataSchemaNode> childNodes = node.getChildNodes();
if (childNodes != null) {
}
final Iterable<DataSchemaNode> childNodes = node.getChildNodes();
if (childNodes != null) {
- resolveDataSchemaNodes(context, caseTypeBuilder, childOfType, childNodes);
+ resolveDataSchemaNodes(context, caseTypeBuilder, findChildOfType(targetNode), childNodes);
}
context.addCaseType(caseNode.getPath(), caseTypeBuilder);
context.addChoiceToCaseMapping(targetType, caseTypeBuilder, node);
}
context.addCaseType(caseNode.getPath(), caseTypeBuilder);
context.addChoiceToCaseMapping(targetType, caseTypeBuilder, node);
private GeneratedTypeBuilder addDefaultInterfaceDefinition(final ModuleContext context,
final SchemaNode schemaNode) {
private GeneratedTypeBuilder addDefaultInterfaceDefinition(final ModuleContext context,
final SchemaNode schemaNode) {
- return addDefaultInterfaceDefinition(context, schemaNode, null);
+ return addDefaultInterfaceDefinition(context, schemaNode, DATA_OBJECT);
}
private GeneratedTypeBuilder addDefaultInterfaceDefinition(final ModuleContext context,
}
private GeneratedTypeBuilder addDefaultInterfaceDefinition(final ModuleContext context,
- final SchemaNode schemaNode, final Type childOf) {
+ final SchemaNode schemaNode, final Type baseInterface) {
final String packageName = packageNameForGeneratedType(context.modulePackageName(), schemaNode.getPath());
final String packageName = packageNameForGeneratedType(context.modulePackageName(), schemaNode.getPath());
- return addDefaultInterfaceDefinition(packageName, schemaNode, childOf, context);
+ return addDefaultInterfaceDefinition(packageName, schemaNode, baseInterface, context);
* @return generated type builder <code>schemaNode</code>
*/
private GeneratedTypeBuilder addDefaultInterfaceDefinition(final String packageName, final SchemaNode schemaNode,
* @return generated type builder <code>schemaNode</code>
*/
private GeneratedTypeBuilder addDefaultInterfaceDefinition(final String packageName, final SchemaNode schemaNode,
- final Type parent, final ModuleContext context) {
+ final Type baseInterface, final ModuleContext context) {
final GeneratedTypeBuilder it = addRawInterfaceDefinition(
JavaTypeName.create(packageName, BindingMapping.getClassName(schemaNode.getQName())), schemaNode);
final GeneratedTypeBuilder it = addRawInterfaceDefinition(
JavaTypeName.create(packageName, BindingMapping.getClassName(schemaNode.getQName())), schemaNode);
- it.addImplementsType(parent == null ? DATA_OBJECT : childOf(parent));
+ it.addImplementsType(baseInterface);
if (!(schemaNode instanceof GroupingDefinition)) {
it.addImplementsType(augmentable(it));
}
if (!(schemaNode instanceof GroupingDefinition)) {
it.addImplementsType(augmentable(it));
}
if (schemaNode instanceof LeafListSchemaNode) {
resolveLeafListSchemaNode(typeBuilder, (LeafListSchemaNode) schemaNode, context);
} else if (schemaNode instanceof ContainerSchemaNode) {
if (schemaNode instanceof LeafListSchemaNode) {
resolveLeafListSchemaNode(typeBuilder, (LeafListSchemaNode) schemaNode, context);
} else if (schemaNode instanceof ContainerSchemaNode) {
- containerToGenType(context, typeBuilder, typeBuilder, (ContainerSchemaNode) schemaNode);
+ containerToGenType(context, typeBuilder, childOf(typeBuilder),
+ (ContainerSchemaNode) schemaNode);
} else if (schemaNode instanceof ChoiceSchemaNode) {
choiceToGeneratedType(context, typeBuilder, (ChoiceSchemaNode) schemaNode);
} else if (schemaNode instanceof ListSchemaNode) {
} else if (schemaNode instanceof ChoiceSchemaNode) {
choiceToGeneratedType(context, typeBuilder, (ChoiceSchemaNode) schemaNode);
} else if (schemaNode instanceof ListSchemaNode) {
- listToGenType(context, typeBuilder, typeBuilder, (ListSchemaNode) schemaNode);
+ listToGenType(context, typeBuilder, childOf(typeBuilder), (ListSchemaNode) schemaNode);