X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-netconf-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fconnect%2Fnetconf%2Fschema%2Fmapping%2FNetconfMessageTransformer.java;h=2971865a70fb50f65e7c032295bf5bf5963a33df;hb=4fa1233c74014f483bbe857283ee098442abf28d;hp=c85a52909d441350ab69536ed3b29fb3ec9c38e7;hpb=bf8f203e671b9156e2e3fe07910565e115fa1b10;p=controller.git diff --git a/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/schema/mapping/NetconfMessageTransformer.java b/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/schema/mapping/NetconfMessageTransformer.java index c85a52909d..2971865a70 100644 --- a/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/schema/mapping/NetconfMessageTransformer.java +++ b/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/schema/mapping/NetconfMessageTransformer.java @@ -7,32 +7,30 @@ */ package org.opendaylight.controller.sal.connect.netconf.schema.mapping; -import java.util.Collections; +import com.google.common.base.Optional; import java.util.List; import java.util.Set; - import javax.activation.UnsupportedDataTypeException; - import org.opendaylight.controller.netconf.api.NetconfMessage; -import org.opendaylight.controller.sal.common.util.Rpcs; import org.opendaylight.controller.sal.connect.api.MessageTransformer; import org.opendaylight.controller.sal.connect.netconf.util.NetconfMessageTransformUtil; import org.opendaylight.controller.sal.connect.util.MessageCounter; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.common.RpcError; import org.opendaylight.yangtools.yang.common.RpcResult; +import org.opendaylight.yangtools.yang.common.RpcResultBuilder; import org.opendaylight.yangtools.yang.data.api.CompositeNode; import org.opendaylight.yangtools.yang.data.impl.CompositeNodeTOImpl; import org.opendaylight.yangtools.yang.data.impl.ImmutableCompositeNode; +import org.opendaylight.yangtools.yang.data.impl.codec.xml.XmlCodecProvider; import org.opendaylight.yangtools.yang.data.impl.codec.xml.XmlDocumentUtils; import org.opendaylight.yangtools.yang.data.impl.util.CompositeNodeBuilder; +import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; import org.opendaylight.yangtools.yang.model.api.NotificationDefinition; +import org.opendaylight.yangtools.yang.model.api.RpcDefinition; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.w3c.dom.Document; import org.w3c.dom.Element; -import com.google.common.base.Optional; - public class NetconfMessageTransformer implements MessageTransformer { public static final String MESSAGE_ID_PREFIX = "m"; @@ -56,7 +54,7 @@ public class NetconfMessageTransformer implements MessageTransformer notifications = ctx.getNotifications(); final Document document = message.getDocument(); - return XmlDocumentUtils.notificationToDomNodes(document, Optional.fromNullable(notifications)); + return XmlDocumentUtils.notificationToDomNodes(document, Optional.fromNullable(notifications), ctx); } @Override @@ -65,7 +63,29 @@ public class NetconfMessageTransformer implements MessageTransformer schemaForRpc = NetconfMessageTransformUtil.findSchemaForRpc(rpc, schemaContext.get()); + if(schemaForRpc.isPresent()) { + final DataNodeContainer schemaForGetConfig = NetconfMessageTransformUtil.createSchemaForRpc(schemaForRpc.get()); + w3cPayload = XmlDocumentUtils.toDocument(rpcPayload, schemaContext.get(), schemaForGetConfig, codecProvider); + } else { + w3cPayload = toRpcRequestWithoutSchema(rpcPayload, codecProvider); + } + } + } else { + w3cPayload = toRpcRequestWithoutSchema(rpcPayload, codecProvider); + } } catch (final UnsupportedDataTypeException e) { throw new IllegalArgumentException("Unable to create message", e); } @@ -73,41 +93,44 @@ public class NetconfMessageTransformer implements MessageTransformer toRpcResult(final NetconfMessage message, final QName rpc) { if(schemaContext.isPresent()) { return toRpcResult(message, rpc, schemaContext.get()); } else { final CompositeNode node = (CompositeNode) XmlDocumentUtils.toDomNode(message.getDocument()); - return Rpcs.getRpcResult(true, node, Collections.emptySet()); + return RpcResultBuilder.success(node).build(); } } private static RpcResult toRpcResult(final NetconfMessage message, final QName rpc, final SchemaContext context) { final CompositeNode compositeNode; - if (NetconfMessageTransformUtil.isDataRetrievalOperation(rpc)) { - final Element xmlData = NetconfMessageTransformUtil.getDataSubtree(message.getDocument()); - final List> dataNodes = XmlDocumentUtils.toDomNodes(xmlData, Optional.of(context.getDataDefinitions()), context); final CompositeNodeBuilder it = ImmutableCompositeNode.builder(); it.setQName(NetconfMessageTransformUtil.NETCONF_RPC_REPLY_QNAME); it.add(ImmutableCompositeNode.create(NetconfMessageTransformUtil.NETCONF_DATA_QNAME, dataNodes)); - compositeNode = it.toInstance(); } else { - // TODO map rpc with schema - compositeNode = (CompositeNode) XmlDocumentUtils.toDomNode(message.getDocument()); + final CompositeNode rpcReply = XmlDocumentUtils.rpcReplyToDomNodes(message.getDocument(), rpc, context); + if (rpcReply != null) { + compositeNode = rpcReply; + } else { + compositeNode = (CompositeNode) XmlDocumentUtils.toDomNode(message.getDocument()); + } } - - return Rpcs.getRpcResult(true, compositeNode, Collections. emptySet()); + return RpcResultBuilder.success( compositeNode ).build(); } @Override public synchronized void onGlobalContextUpdated(final SchemaContext schemaContext) { - this.schemaContext = Optional.of(schemaContext); + this.schemaContext = Optional.fromNullable(schemaContext); } }