X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=netconf%2Fsal-netconf-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fnetconf%2Fsal%2Fconnect%2Fnetconf%2Fschema%2Fmapping%2FNetconfMessageTransformer.java;h=5c70dd3f680d82f3036dfeeb4e26350e49edde2b;hb=b8f5ebd2f817de1d613d84cf41f3516728767eba;hp=1c390fb903145a3d4c4202a7ba74ec6c96977ca8;hpb=ce1ff33d795c086b046415215696ef1be7572646;p=netconf.git diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/NetconfMessageTransformer.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/NetconfMessageTransformer.java index 1c390fb903..5c70dd3f68 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/NetconfMessageTransformer.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/NetconfMessageTransformer.java @@ -45,7 +45,9 @@ import org.opendaylight.netconf.sal.connect.util.MessageCounter; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.common.RpcError; +import org.opendaylight.yangtools.yang.common.YangConstants; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; +import org.opendaylight.yangtools.yang.data.api.schema.AnyXmlNode; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; @@ -53,6 +55,7 @@ import org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult; +import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree; import org.opendaylight.yangtools.yang.model.api.ActionDefinition; import org.opendaylight.yangtools.yang.model.api.ActionNodeContainer; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; @@ -100,7 +103,7 @@ public class NetconfMessageTransformer implements MessageTransformer getActions() { - Builder builder = ImmutableSet.builder(); + final Builder builder = ImmutableSet.builder(); for (DataSchemaNode dataSchemaNode : schemaContext.getChildNodes()) { if (dataSchemaNode instanceof ActionNodeContainer) { findAction(dataSchemaNode, builder); @@ -167,22 +170,24 @@ public class NetconfMessageTransformer implements MessageTransformer payload) { + public NetconfMessage toRpcRequest(final SchemaPath rpc, final NormalizedNode payload) { // In case no input for rpc is defined, we can simply construct the payload here final QName rpcQName = rpc.getLastComponent(); - Map currentMappedRpcs = mappedRpcs; // Determine whether a base netconf operation is being invoked // and also check if the device exposed model for base netconf. // If no, use pre built base netconf operations model final boolean needToUseBaseCtx = mappedRpcs.get(rpcQName) == null && isBaseOrNotificationRpc(rpcQName); + final Map currentMappedRpcs; if (needToUseBaseCtx) { currentMappedRpcs = baseSchema.getMappedRpcs(); + } else { + currentMappedRpcs = mappedRpcs; } - Preconditions.checkNotNull(currentMappedRpcs.get(rpcQName), + final RpcDefinition mappedRpc = Preconditions.checkNotNull(currentMappedRpcs.get(rpcQName), "Unknown rpc %s, available rpcs: %s", rpcQName, currentMappedRpcs.keySet()); - if (currentMappedRpcs.get(rpcQName).getInput().getChildNodes().isEmpty()) { + if (mappedRpc.getInput().getChildNodes().isEmpty()) { return new NetconfMessage(NetconfMessageTransformUtil .prepareDomResultForRpcRequest(rpcQName, counter).getNode().getOwnerDocument()); } @@ -192,17 +197,17 @@ public class NetconfMessageTransformer implements MessageTransformer payload) { ActionDefinition actionDefinition = null; - SchemaPath schemaPath = action; for (ActionDefinition actionDef : actions) { if (actionDef.getPath().getLastComponent().equals(action.getLastComponent())) { actionDefinition = actionDef; - schemaPath = actionDef.getPath(); } } Preconditions.checkNotNull(actionDefinition, "Action does not exist: %s", action.getLastComponent()); - if (actionDefinition.getInput().getChildNodes().isEmpty()) { + final ContainerSchemaNode inputDef = actionDefinition.getInput(); + if (inputDef.getChildNodes().isEmpty()) { return new NetconfMessage(NetconfMessageTransformUtil.prepareDomResultForActionRequest( - domDataTreeIdentifier, action, counter, actionDefinition.getQName().getLocalName()) - .getNode().getOwnerDocument()); + DataSchemaContextTree.from(schemaContext), domDataTreeIdentifier, action, counter, + actionDefinition.getQName().getLocalName()).getNode().getOwnerDocument()); } Preconditions.checkNotNull(payload, "Transforming an action with input: %s, payload cannot be null", @@ -234,14 +238,15 @@ public class NetconfMessageTransformer implements MessageTransformer currentMappedRpcs = mappedRpcs; @@ -314,7 +305,7 @@ public class NetconfMessageTransformer implements MessageTransformeremptyList());