import org.opendaylight.netconf.api.xml.XmlElement;
import org.opendaylight.netconf.api.xml.XmlNetconfConstants;
import org.opendaylight.netconf.api.xml.XmlUtil;
-import org.opendaylight.yangtools.rcf8528.data.util.EmptyMountPointContext;
import org.opendaylight.yangtools.rfc7952.data.api.NormalizedMetadata;
+import org.opendaylight.yangtools.rfc7952.data.api.StreamWriterMetadataExtension;
import org.opendaylight.yangtools.rfc7952.data.util.NormalizedMetadataWriter;
import org.opendaylight.yangtools.rfc8528.data.api.MountPointContext;
+import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.QNameModule;
import org.opendaylight.yangtools.yang.common.Revision;
import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter;
import org.opendaylight.yangtools.yang.data.codec.xml.XMLStreamNormalizedNodeStreamWriter;
-import org.opendaylight.yangtools.yang.data.codec.xml.XmlCodecFactory;
import org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream;
import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter;
import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult;
-import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+ XmlUtil.toString(response));
}
+ /**
+ * Write {@code normalized} data into {@link DOMResult}.
+ *
+ * @param normalized data to be written
+ * @param result DOM result holder
+ * @param schemaPath schema path of the parent node
+ * @param context mountpoint schema context
+ * @throws IOException when failed to write data into {@link NormalizedNodeStreamWriter}
+ * @throws XMLStreamException when failed to serialize data into XML document
+ */
@SuppressWarnings("checkstyle:IllegalCatch")
- public static void writeNormalizedNode(final NormalizedNode<?, ?> normalized, final DOMResult result,
+ public static void writeNormalizedNode(final NormalizedNode normalized, final DOMResult result,
final SchemaPath schemaPath, final EffectiveModelContext context)
throws IOException, XMLStreamException {
final XMLStreamWriter writer = XML_FACTORY.createXMLStreamWriter(result);
}
}
+ /**
+ * Write {@code normalized} data along with corresponding {@code metadata} into {@link DOMResult}.
+ *
+ * @param normalized data to be written
+ * @param metadata metadata to be written
+ * @param result DOM result holder
+ * @param schemaPath schema path of the parent node
+ * @param context mountpoint schema context
+ * @throws IOException when failed to write data into {@link NormalizedNodeStreamWriter}
+ * @throws XMLStreamException when failed to serialize data into XML document
+ */
@SuppressWarnings("checkstyle:IllegalCatch")
- public static void writeNormalizedNode(final NormalizedNode<?, ?> normalized,
+ public static void writeNormalizedNode(final NormalizedNode normalized,
final @Nullable NormalizedMetadata metadata,
final DOMResult result, final SchemaPath schemaPath,
final EffectiveModelContext context) throws IOException, XMLStreamException {
}
}
+ /**
+ * Write data specified by {@link YangInstanceIdentifier} into {@link DOMResult}.
+ *
+ * @param query path to the root node
+ * @param result DOM result holder
+ * @param schemaPath schema path of the parent node
+ * @param context mountpoint schema context
+ * @throws IOException when failed to write data into {@link NormalizedNodeStreamWriter}
+ * @throws XMLStreamException when failed to serialize data into XML document
+ */
+ @SuppressWarnings("checkstyle:IllegalCatch")
+ public static void writeNormalizedNode(final YangInstanceIdentifier query, final DOMResult result,
+ final SchemaPath schemaPath, final EffectiveModelContext context) throws IOException, XMLStreamException {
+ final XMLStreamWriter xmlWriter = XML_FACTORY.createXMLStreamWriter(result);
+ XML_NAMESPACE_SETTER.initializeNamespace(xmlWriter);
+ try (NormalizedNodeStreamWriter streamWriter = XMLStreamNormalizedNodeStreamWriter.create(xmlWriter,
+ context, schemaPath);
+ EmptyListXmlWriter writer = new EmptyListXmlWriter(streamWriter, xmlWriter)) {
+ final Iterator<PathArgument> it = query.getPathArguments().iterator();
+ final PathArgument first = it.next();
+ StreamingContext.fromSchemaAndQNameChecked(context, first.getNodeType()).streamToWriter(writer, first, it);
+ } finally {
+ try {
+ if (xmlWriter != null) {
+ xmlWriter.close();
+ }
+ } catch (final Exception e) {
+ LOG.warn("Unable to close resource properly", e);
+ }
+ }
+ }
+
+ /**
+ * Write data specified by {@link YangInstanceIdentifier} along with corresponding {@code metadata}
+ * into {@link DOMResult}.
+ *
+ * @param query path to the root node
+ * @param metadata metadata to be written
+ * @param result DOM result holder
+ * @param schemaPath schema path of the parent node
+ * @param context mountpoint schema context
+ * @throws IOException when failed to write data into {@link NormalizedNodeStreamWriter}
+ * @throws XMLStreamException when failed to serialize data into XML document
+ */
+ @SuppressWarnings("checkstyle:IllegalCatch")
+ public static void writeNormalizedNode(final YangInstanceIdentifier query,
+ final @Nullable NormalizedMetadata metadata, final DOMResult result, final SchemaPath schemaPath,
+ final EffectiveModelContext context) throws IOException, XMLStreamException {
+ if (metadata == null) {
+ writeNormalizedNode(query, result, schemaPath, context);
+ return;
+ }
+
+ final XMLStreamWriter xmlWriter = XML_FACTORY.createXMLStreamWriter(result);
+ XML_NAMESPACE_SETTER.initializeNamespace(xmlWriter);
+ try (NormalizedNodeStreamWriter streamWriter = XMLStreamNormalizedNodeStreamWriter
+ .create(xmlWriter, context, schemaPath);
+ EmptyListXmlMetadataWriter writer = new EmptyListXmlMetadataWriter(streamWriter, xmlWriter, streamWriter
+ .getExtensions().getInstance(StreamWriterMetadataExtension.class), metadata)) {
+ final Iterator<PathArgument> it = query.getPathArguments().iterator();
+ final PathArgument first = it.next();
+ StreamingContext.fromSchemaAndQNameChecked(context, first.getNodeType()).streamToWriter(writer, first, it);
+ } finally {
+ try {
+ if (xmlWriter != null) {
+ xmlWriter.close();
+ }
+ } catch (final Exception e) {
+ LOG.warn("Unable to close resource properly", e);
+ }
+ }
+ }
+
/**
* Writing subtree filter specified by {@link YangInstanceIdentifier} into {@link DOMResult}.
*
*
* @param query path to parent element
* @param fields subpaths relative to parent path that identify specific fields
- * @return created {@link TreeNode} structure
+ * @return created {@link PathNode} structure
*/
private static PathNode constructPathArgumentTree(final YangInstanceIdentifier query,
final List<YangInstanceIdentifier> fields) {
return rootTreeNode;
}
- public static NormalizedNodeResult transformDOMSourceToNormalizedNode(final MountPointContext mountContext,
+ public static NormalizedNodeResult transformDOMSourceToNormalizedNode(final MountPointContext mount,
final DOMSource value) throws XMLStreamException, URISyntaxException, IOException, SAXException {
final NormalizedNodeResult resultHolder = new NormalizedNodeResult();
final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder);
- final XmlCodecFactory codecs = XmlCodecFactory.create(mountContext);
-
- // FIXME: we probably need to propagate MountPointContext here and not just the child nodes
- final ContainerSchemaNode dataRead = new NodeContainerProxy(NETCONF_DATA_QNAME,
- mountContext.getEffectiveModelContext().getChildNodes());
- try (XmlParserStream xmlParserStream = XmlParserStream.create(writer, codecs, dataRead)) {
+ try (XmlParserStream xmlParserStream = XmlParserStream.create(writer, new ProxyMountPointContext(mount))) {
xmlParserStream.traverse(value);
}
return resultHolder;
}
-
// FIXME: document this interface contract. Does it support RFC8528/RFC8542? How?
public static NormalizedNodeResult transformDOMSourceToNormalizedNode(final EffectiveModelContext schemaContext,
final DOMSource value) throws XMLStreamException, URISyntaxException, IOException, SAXException {