*/
package org.opendaylight.netconf.sal.connect.netconf.schema.mapping;
-import java.util.Date;
+import java.time.Instant;
import java.util.Map;
import javax.xml.transform.dom.DOMSource;
-import org.opendaylight.controller.config.util.xml.MissingNameSpaceException;
-import org.opendaylight.controller.config.util.xml.XmlElement;
-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.DOMNotification;
+import org.opendaylight.mdsal.dom.api.DOMRpcResult;
+import org.opendaylight.mdsal.dom.spi.DefaultDOMRpcResult;
import org.opendaylight.netconf.api.NetconfMessage;
-import org.opendaylight.netconf.sal.connect.api.MessageTransformer;
+import org.opendaylight.netconf.api.xml.MissingNameSpaceException;
+import org.opendaylight.netconf.api.xml.XmlElement;
+import org.opendaylight.netconf.sal.connect.api.NotificationTransformer;
+import org.opendaylight.netconf.sal.connect.api.RpcTransformer;
import org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil;
import org.opendaylight.netconf.sal.connect.util.MessageCounter;
import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.api.schema.AnyXmlNode;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
+import org.opendaylight.yangtools.yang.data.api.schema.DOMSourceAnyxmlNode;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
/**
* Transforms anyxml rpcs for schemaless netconf devices.
*/
-public class SchemalessMessageTransformer implements MessageTransformer<NetconfMessage> {
-
- private static final YangInstanceIdentifier.NodeIdentifier REPLY_ID =
- new YangInstanceIdentifier.NodeIdentifier(NetconfMessageTransformUtil.NETCONF_RPC_REPLY_QNAME);
+public class SchemalessMessageTransformer implements NotificationTransformer, RpcTransformer {
// TODO maybe we should move this somewhere else as this
// might be used in applications using schemaless mountpoints
- public static final YangInstanceIdentifier.NodeIdentifier SCHEMALESS_NOTIFICATION_PAYLOAD =
- new YangInstanceIdentifier.NodeIdentifier(QName.create("schemaless-notification-payload"));
+ public static final NodeIdentifier SCHEMALESS_NOTIFICATION_PAYLOAD =
+ // FIXME: assign proper namespace
+ new NodeIdentifier(QName.create("", "schemaless-notification-payload"));
private final MessageCounter counter;
@Override
public DOMNotification toNotification(final NetconfMessage message) {
- final Map.Entry<Date, XmlElement> stripped = NetconfMessageTransformUtil.stripNotification(message);
+ final Map.Entry<Instant, XmlElement> stripped = NetconfMessageTransformUtil.stripNotification(message);
final QName notificationNoRev;
try {
notificationNoRev =
+ message + ", cannot find namespace", e);
}
- final AnyXmlNode notificationPayload = Builders.anyXmlBuilder()
- .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(notificationNoRev))
+ final DOMSourceAnyxmlNode notificationPayload = Builders.anyXmlBuilder()
+ .withNodeIdentifier(new NodeIdentifier(notificationNoRev))
.withValue(new DOMSource(stripped.getValue().getDomElement()))
.build();
}
@Override
- public NetconfMessage toRpcRequest(final SchemaPath rpc, final NormalizedNode<?, ?> input) {
- final DOMSource payload = (DOMSource) input.getValue();
+ public NetconfMessage toRpcRequest(final QName rpc, final NormalizedNode input) {
+ final DOMSource payload = (DOMSource) input.body();
wrapPayload((Document) payload.getNode());
- return new NetconfMessage(((Document) ((AnyXmlNode) input).getValue().getNode()));
+ return new NetconfMessage((Document) ((DOMSourceAnyxmlNode) input).body().getNode());
}
/**
* @return anyxml
*/
@Override
- public DOMRpcResult toRpcResult(final NetconfMessage rpcReply, final SchemaPath rpc) {
- final Document document = rpcReply.getDocument();
- final AnyXmlNode result;
- if (BaseRpcSchemalessTransformer.isOkPresent(document)) {
- result = null;
- } else {
- result = Builders.anyXmlBuilder()
- .withNodeIdentifier(REPLY_ID)
- .withValue(new DOMSource(rpcReply.getDocument()))
- .build();
- }
- return new DefaultDOMRpcResult(result);
+ public DOMRpcResult toRpcResult(final NetconfMessage rpcReply, final QName rpc) {
+ final var document = rpcReply.getDocument();
+ return new DefaultDOMRpcResult(BaseRpcSchemalessTransformer.isOkPresent(document) ? null
+ : Builders.anyXmlBuilder()
+ .withNodeIdentifier(NetconfMessageTransformUtil.NETCONF_RPC_REPLY_NODEID)
+ .withValue(new DOMSource(document))
+ .build());
}
private void wrapPayload(final Document doc) {