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=2bd1ce4b4afb594d18b0158d92bd997596b890f3;hpb=fc71e17ca46e029ad6535613498842ff2854868d;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 2bd1ce4b4a..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 @@ -20,22 +20,21 @@ import com.google.common.collect.Multimap; import com.google.common.collect.Multimaps; import java.io.IOException; import java.net.URISyntaxException; +import java.time.Instant; import java.util.Collection; import java.util.Collections; -import java.util.Date; import java.util.Map; import java.util.Set; -import javax.annotation.Nonnull; import javax.xml.parsers.ParserConfigurationException; import javax.xml.stream.XMLStreamException; import javax.xml.transform.dom.DOMResult; import javax.xml.transform.dom.DOMSource; -import org.opendaylight.controller.md.sal.dom.api.DOMEvent; -import org.opendaylight.controller.md.sal.dom.api.DOMNotification; -import org.opendaylight.controller.md.sal.dom.api.DOMRpcResult; -import org.opendaylight.controller.md.sal.dom.spi.DefaultDOMRpcResult; import org.opendaylight.mdsal.dom.api.DOMActionResult; import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier; +import org.opendaylight.mdsal.dom.api.DOMEvent; +import org.opendaylight.mdsal.dom.api.DOMNotification; +import org.opendaylight.mdsal.dom.api.DOMRpcResult; +import org.opendaylight.mdsal.dom.spi.DefaultDOMRpcResult; import org.opendaylight.mdsal.dom.spi.SimpleDOMActionResult; import org.opendaylight.netconf.api.NetconfMessage; import org.opendaylight.netconf.api.xml.MissingNameSpaceException; @@ -46,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; @@ -54,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; @@ -101,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); @@ -110,7 +112,7 @@ public class NetconfMessageTransformer implements MessageTransformer builder) { + private void findAction(final DataSchemaNode dataSchemaNode, final Builder builder) { if (dataSchemaNode instanceof ActionNodeContainer) { final ActionNodeContainer containerSchemaNode = (ActionNodeContainer) dataSchemaNode; for (ActionDefinition actionDefinition : containerSchemaNode.getActions()) { @@ -126,7 +128,7 @@ public class NetconfMessageTransformer implements MessageTransformer stripped = NetconfMessageTransformUtil.stripNotification(message); + final Map.Entry stripped = NetconfMessageTransformUtil.stripNotification(message); final QName notificationNoRev; try { notificationNoRev = QName.create( @@ -168,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()); } @@ -193,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", @@ -235,14 +238,15 @@ public class NetconfMessageTransformer implements MessageTransformer currentMappedRpcs = mappedRpcs; @@ -307,7 +297,7 @@ public class NetconfMessageTransformer implements MessageTransformeremptyList()); + if (normalizedNode == null) { + return new SimpleDOMActionResult(Collections.emptyList()); + } else { + return new SimpleDOMActionResult(normalizedNode, Collections.emptyList()); + } } private NormalizedNode parseResult(final NetconfMessage message, @@ -346,29 +340,26 @@ public class NetconfMessageTransformer implements MessageTransformer