From: Jie Han Date: Fri, 14 Jul 2017 14:07:22 +0000 (+0800) Subject: Binding generator v2 - fix action #1 X-Git-Tag: release/carbon-sr2~27 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=mdsal.git;a=commitdiff_plain;h=d4b8df977e130c4439e5256c5040ab31360511c0 Binding generator v2 - fix action #1 - support action tied to a container or list data node Change-Id: I0dafa0559608be6a269ad177f73f400bf8e18a87 Signed-off-by: Jie Han (cherry picked from commit e41f4aa9fad1174a0600d4f006ed992b6587934e) --- diff --git a/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/RpcActionGenHelper.java b/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/RpcActionGenHelper.java index d04c5dccd1..3a3812b9ca 100644 --- a/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/RpcActionGenHelper.java +++ b/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/RpcActionGenHelper.java @@ -16,6 +16,7 @@ import static org.opendaylight.mdsal.binding.javav2.generator.impl.GenHelperUtil import static org.opendaylight.mdsal.binding.javav2.generator.impl.GenHelperUtil.addRawInterfaceDefinition; import static org.opendaylight.mdsal.binding.javav2.generator.impl.GenHelperUtil.moduleTypeBuilder; import static org.opendaylight.mdsal.binding.javav2.generator.impl.GenHelperUtil.processUsesImplements; +import static org.opendaylight.mdsal.binding.javav2.generator.impl.GenHelperUtil.resolveDataSchemaNodesCheck; import static org.opendaylight.mdsal.binding.javav2.generator.util.BindingGeneratorUtil.encodeAngleBrackets; import static org.opendaylight.mdsal.binding.javav2.generator.util.BindingTypes.ACTION; import static org.opendaylight.mdsal.binding.javav2.generator.util.BindingTypes.INPUT; @@ -34,6 +35,7 @@ import static org.opendaylight.mdsal.binding.javav2.generator.util.Types.paramet import com.google.common.annotations.Beta; import com.google.common.base.Optional; +import com.google.common.base.Preconditions; import java.util.Collection; import java.util.Map; import java.util.Set; @@ -49,7 +51,9 @@ import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.ActionDefinition; import org.opendaylight.yangtools.yang.model.api.ActionNodeContainer; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; +import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; +import org.opendaylight.yangtools.yang.model.api.GroupingDefinition; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.OperationDefinition; @@ -92,6 +96,38 @@ final class RpcActionGenHelper { return Optional.absent(); } + private static void resolveActions(final DataNodeContainer parent, final Module module, + final SchemaContext schemaContext, final boolean verboseClassComments, + Map> genTypeBuilders, final Map genCtx, + TypeProvider typeProvider, final BindingNamespaceType namespaceType) { + Preconditions.checkNotNull(parent, "Parent should not be NULL."); + final Collection potentials = parent.getChildNodes(); + for (DataSchemaNode potential : potentials) { + if (resolveDataSchemaNodesCheck(module, schemaContext,potential)) { + BindingNamespaceType namespaceType1 = namespaceType; + if (namespaceType.equals(BindingNamespaceType.Data)) { + if (potential instanceof GroupingDefinition) { + namespaceType1 = BindingNamespaceType.Grouping; + } + } + + if (potential instanceof ActionNodeContainer) { + final Set actions = ((ActionNodeContainer) potential).getActions(); + for (ActionDefinition action : actions) { + genCtx.get(module).addTopLevelNodeType(resolveOperation(potential, action, module, + schemaContext, verboseClassComments, genTypeBuilders, genCtx, typeProvider, true, + namespaceType1)); + } + } + + if (potential instanceof DataNodeContainer) { + resolveActions((DataNodeContainer) potential, module, schemaContext, verboseClassComments, + genTypeBuilders, genCtx, typeProvider, namespaceType1); + } + } + } + } + /** * Converts Yang 1.1 Actions to list of Type objects. * @param module module from which is obtained set of all Action objects to @@ -105,17 +141,8 @@ final class RpcActionGenHelper { Map> genTypeBuilders, TypeProvider typeProvider) { checkModuleAndModuleName(module); - final Collection potentials = module.getChildNodes(); - for (DataSchemaNode potential : potentials) { - if (potential instanceof ActionNodeContainer) { - final Set actions = ((ActionNodeContainer) potential).getActions(); - for (ActionDefinition action: actions) { - genCtx.get(module).addTopLevelNodeType(resolveOperation(potential, action, module, - schemaContext, verboseClassComments, genTypeBuilders, genCtx, typeProvider, true, - BindingNamespaceType.Data)); - } - } - } + resolveActions(module, module, schemaContext, verboseClassComments, genTypeBuilders, genCtx, typeProvider, + BindingNamespaceType.Data); return genCtx; }