import com.google.common.collect.Multimaps;
import com.google.common.collect.Streams;
import java.io.IOException;
-import java.net.URI;
import java.net.URISyntaxException;
import java.time.Instant;
import java.util.AbstractMap;
import org.opendaylight.yangtools.rfc8528.data.api.MountPointContext;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.Revision;
+import org.opendaylight.yangtools.yang.common.XMLNamespace;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
import org.opendaylight.yangtools.yang.model.api.SchemaNode;
import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
+import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.Document;
public class NetconfMessageTransformer implements MessageTransformer<NetconfMessage> {
private static final Logger LOG = LoggerFactory.getLogger(NetconfMessageTransformer.class);
- private static final ImmutableSet<URI> BASE_OR_NOTIFICATION_NS = ImmutableSet.of(
+ private static final ImmutableSet<XMLNamespace> BASE_OR_NOTIFICATION_NS = ImmutableSet.of(
NETCONF_URI,
IETF_NETCONF_NOTIFICATIONS.getNamespace(),
CREATE_SUBSCRIPTION_RPC_QNAME.getNamespace());
final NotificationDefinition mostRecentNotification = getMostRecentNotification(notificationDefinitions);
- final ContainerSchemaNode notificationAsContainerSchemaNode =
- NetconfMessageTransformUtil.createSchemaForNotification(mostRecentNotification);
-
final ContainerNode content;
try {
final NormalizedNodeResult resultHolder = new NormalizedNodeResult();
final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder);
final XmlParserStream xmlParser = XmlParserStream.create(writer, mountContext,
- notificationAsContainerSchemaNode, strictParsing);
+ SchemaInferenceStack.ofInstantiatedPath(mountContext.getEffectiveModelContext(),
+ mostRecentNotification.getPath()).toInference(), strictParsing);
xmlParser.traverse(new DOMSource(element));
content = (ContainerNode) resultHolder.getResult();
} catch (XMLStreamException | URISyntaxException | IOException | SAXException
private Optional<NestedNotificationInfo> findNestedNotification(final NetconfMessage message,
final Element element) {
final Iterator<? extends Module> modules = mountContext.getEffectiveModelContext()
- .findModules(URI.create(element.getNamespaceURI())).iterator();
+ .findModules(XMLNamespace.of(element.getNamespaceURI())).iterator();
if (!modules.hasNext()) {
throw new IllegalArgumentException(
"Unable to parse notification " + message + ", cannot find top level module");
}
@Override
- public NetconfMessage toRpcRequest(final QName rpc, final NormalizedNode<?, ?> payload) {
+ public NetconfMessage toRpcRequest(final QName rpc, final NormalizedNode payload) {
// In case no input for rpc is defined, we can simply construct the payload here
// Determine whether a base netconf operation is being invoked
@Override
public NetconfMessage toActionRequest(final Absolute action, final DOMDataTreeIdentifier domDataTreeIdentifier,
- final NormalizedNode<?, ?> payload) {
+ final NormalizedNode payload) {
final ActionDefinition actionDef = actions.get(action);
Preconditions.checkArgument(actionDef != null, "Action does not exist: %s", action);
@Override
public synchronized DOMRpcResult toRpcResult(final NetconfMessage message, final QName rpc) {
- final NormalizedNode<?, ?> normalizedNode;
+ final NormalizedNode normalizedNode;
if (NetconfMessageTransformUtil.isDataRetrievalOperation(rpc)) {
normalizedNode = Builders.containerBuilder()
.withNodeIdentifier(NetconfMessageTransformUtil.NETCONF_RPC_REPLY_NODEID)
}
}
- private NormalizedNode<?, ?> parseResult(final NetconfMessage message,
- final OperationDefinition operationDefinition) {
+ private NormalizedNode parseResult(final NetconfMessage message, final OperationDefinition operationDefinition) {
final Optional<XmlElement> okResponseElement = XmlElement.fromDomDocument(message.getDocument())
.getOnlyChildElementWithSameNamespaceOptionally("ok");
if (operationDefinition.getOutput().getChildNodes().isEmpty()) {
final NormalizedNodeResult resultHolder = new NormalizedNodeResult();
final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder);
final XmlParserStream xmlParser = XmlParserStream.create(writer, mountContext,
- operationDefinition.getOutput(), strictParsing);
+ // FIXME: we should have a cached inference here
+ SchemaInferenceStack.ofInstantiatedPath(mountContext.getEffectiveModelContext(),
+ operationDefinition.getOutput().getPath()).toInference(), strictParsing);
xmlParser.traverse(new DOMSource(element));
return resultHolder.getResult();
} catch (XMLStreamException | URISyntaxException | IOException | SAXException e) {
NetconfDeviceNotification(final ContainerNode content, final Instant eventTime) {
this.content = content;
this.eventTime = eventTime;
- this.schemaPath = Absolute.of(content.getNodeType());
+ this.schemaPath = Absolute.of(content.getIdentifier().getNodeType());
}
NetconfDeviceNotification(final ContainerNode content, final Absolute schemaPath, final Instant eventTime) {