Eliminate SubscribeToStreamUtil
[netconf.git] / restconf / restconf-nb / src / main / java / org / opendaylight / restconf / nb / rfc8040 / streams / listeners / DataTreeCandidateFormatter.java
index 35ef644b17d8d5b0011ce6661310ca8675ae89fb..dbd7a455fbb714387c6d92d17b691f5dcb93389c 100644 (file)
@@ -9,26 +9,20 @@ package org.opendaylight.restconf.nb.rfc8040.streams.listeners;
 
 import static org.opendaylight.restconf.nb.rfc8040.streams.listeners.NotificationFormatter.DATA_CHANGED_NOTIFICATION_ELEMENT;
 import static org.opendaylight.restconf.nb.rfc8040.streams.listeners.NotificationFormatter.DATA_CHANGE_EVENT_ELEMENT;
-import static org.opendaylight.restconf.nb.rfc8040.streams.listeners.NotificationFormatter.NOTIFICATION_ELEMENT;
-import static org.opendaylight.restconf.nb.rfc8040.streams.listeners.NotificationFormatter.NOTIFICATION_NAMESPACE;
 import static org.opendaylight.restconf.nb.rfc8040.streams.listeners.NotificationFormatter.SAL_REMOTE_NAMESPACE;
 import static org.opendaylight.restconf.nb.rfc8040.streams.listeners.NotificationFormatter.XML_OUTPUT_FACTORY;
 
 import java.io.IOException;
-import java.time.Instant;
 import java.util.Collection;
-import java.util.stream.Collectors;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamWriter;
 import javax.xml.transform.dom.DOMResult;
 import javax.xml.xpath.XPathExpressionException;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 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.tree.api.DataTreeCandidate;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
@@ -36,22 +30,19 @@ import org.w3c.dom.Element;
  * Base formatter for DataTreeCandidates which only handles exporting to a document for filter checking purpose.
  */
 abstract class DataTreeCandidateFormatter extends EventFormatter<Collection<DataTreeCandidate>> {
-    DataTreeCandidateFormatter() {
-
+    DataTreeCandidateFormatter(final TextParameters textParams) {
+        super(textParams);
     }
 
-    DataTreeCandidateFormatter(final String xpathFilter) throws XPathExpressionException {
-        super(xpathFilter);
+    DataTreeCandidateFormatter(final TextParameters textParams, final String xpathFilter)
+            throws XPathExpressionException {
+        super(textParams, xpathFilter);
     }
 
     @Override
     final void fillDocument(final Document doc, final EffectiveModelContext schemaContext,
             final Collection<DataTreeCandidate> input) throws IOException {
-        final Element notificationElement = doc.createElementNS(NOTIFICATION_NAMESPACE, NOTIFICATION_ELEMENT);
-        final Element eventTimeElement = doc.createElement("eventTime");
-        eventTimeElement.setTextContent(toRFC3339(Instant.now()));
-        notificationElement.appendChild(eventTimeElement);
-
+        final Element notificationElement = NotificationFormatter.createNotificationElement(doc);
         final Element notificationEventElement = doc.createElementNS(
             SAL_REMOTE_NAMESPACE, DATA_CHANGED_NOTIFICATION_ELEMENT);
 
@@ -62,12 +53,8 @@ abstract class DataTreeCandidateFormatter extends EventFormatter<Collection<Data
                 final DOMResult domResult = new DOMResult(dataElement);
                 final XMLStreamWriter writer = XML_OUTPUT_FACTORY.createXMLStreamWriter(domResult);
 
-                final SchemaPath path = SchemaPath.create(candidate.getRootPath().getPathArguments().stream()
-                        .filter(p -> !(p instanceof YangInstanceIdentifier.NodeIdentifierWithPredicates))
-                        .map(YangInstanceIdentifier.PathArgument::getNodeType).collect(Collectors.toList()), true);
-
                 writeCandidate(XMLStreamNormalizedNodeStreamWriter.create(writer, schemaContext,
-                        path), candidate);
+                    candidate.getRootPath()), candidate);
 
                 dataChangedElement.appendChild(dataElement);
             } catch (final XMLStreamException e) {
@@ -80,9 +67,10 @@ abstract class DataTreeCandidateFormatter extends EventFormatter<Collection<Data
 
     static void writeCandidate(final NormalizedNodeStreamWriter writer, final DataTreeCandidate candidate)
             throws IOException {
-        if (candidate.getRootNode().getDataAfter().isPresent()) {
-            try (NormalizedNodeWriter nodeWriter = NormalizedNodeWriter.forStreamWriter(writer)) {
-                nodeWriter.write(candidate.getRootNode().getDataAfter().get());
+        final var dataAfter = candidate.getRootNode().dataAfter();
+        if (dataAfter != null) {
+            try (var nodeWriter = NormalizedNodeWriter.forStreamWriter(writer)) {
+                nodeWriter.write(dataAfter);
             }
         }
     }