Eliminate SubscribeToStreamUtil
[netconf.git] / restconf / restconf-nb / src / main / java / org / opendaylight / restconf / nb / rfc8040 / streams / listeners / XMLNotificationFormatter.java
index b4afe63ee7fe9bac758c9c42ef0d7db710566b27..e2a2d6cdcc2955f8098f8c79a6e6359764f6587f 100644 (file)
@@ -11,77 +11,59 @@ import java.io.IOException;
 import java.io.StringWriter;
 import java.time.Instant;
 import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamWriter;
 import javax.xml.xpath.XPathExpressionException;
 import org.opendaylight.mdsal.dom.api.DOMNotification;
-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.model.api.EffectiveModelContext;
 
 final class XMLNotificationFormatter extends NotificationFormatter {
-    private static final XMLNotificationFormatter INSTANCE = new XMLNotificationFormatter();
+    private static final XMLNotificationFormatter EMPTY = new XMLNotificationFormatter(TextParameters.EMPTY);
 
-    static final String NOTIFICATION_NAMESPACE = "urn:ietf:params:xml:ns:netconf:notification:1.0";
-    static final String NOTIFICATION_ELEMENT = "notification";
-
-    static final String DATA_CHANGED_NAMESPACE = "urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote";
-    static final String DATA_CHANGED_NOTIFICATION_ELEMENT = "data-changed-notification";
-
-    static final String DATA_CHANGE_EVENT_ELEMENT = "data-change-event";
-
-    static final NotificationFormatterFactory FACTORY = new NotificationFormatterFactory() {
+    static final NotificationFormatterFactory FACTORY = new NotificationFormatterFactory(EMPTY) {
         @Override
-        public XMLNotificationFormatter getFormatter(final String xpathFilter) throws XPathExpressionException {
-            return new XMLNotificationFormatter(xpathFilter);
+        XMLNotificationFormatter newFormatter(final TextParameters textParams) {
+            return new XMLNotificationFormatter(textParams);
         }
 
         @Override
-        public XMLNotificationFormatter getFormatter() {
-            return INSTANCE;
+        XMLNotificationFormatter getFormatter(final TextParameters textParams, final String xpathFilter)
+                throws XPathExpressionException {
+            return new XMLNotificationFormatter(textParams, xpathFilter);
         }
     };
 
-    XMLNotificationFormatter() {
-
+    XMLNotificationFormatter(final TextParameters textParams) {
+        super(textParams);
     }
 
-    XMLNotificationFormatter(final String xpathFilter) throws XPathExpressionException {
-        super(xpathFilter);
+    XMLNotificationFormatter(final TextParameters textParams, final String xpathFilter)
+            throws XPathExpressionException {
+        super(textParams, xpathFilter);
     }
 
     @Override
-    String createText(final EffectiveModelContext schemaContext, final DOMNotification input, final Instant now,
-                      final boolean leafNodesOnly, final boolean skipData)
-            throws IOException {
-        final StringWriter writer = new StringWriter();
-        try {
-            final XMLStreamWriter xmlStreamWriter = XML_OUTPUT_FACTORY.createXMLStreamWriter(writer);
-            xmlStreamWriter.setDefaultNamespace(NOTIFICATION_NAMESPACE);
-
-            xmlStreamWriter.writeStartElement(NOTIFICATION_NAMESPACE, NOTIFICATION_ELEMENT);
-            xmlStreamWriter.writeDefaultNamespace(NOTIFICATION_NAMESPACE);
-
-            xmlStreamWriter.writeStartElement("eventTime");
-            xmlStreamWriter.writeCharacters(toRFC3339(now));
-            xmlStreamWriter.writeEndElement();
+    String createText(final TextParameters params, final EffectiveModelContext schemaContext,
+            final DOMNotification input, final Instant now) throws IOException {
+        final var writer = new StringWriter();
 
-            final NormalizedNodeStreamWriter nnStreamWriter =
-                    XMLStreamNormalizedNodeStreamWriter.create(xmlStreamWriter, schemaContext, input.getType());
-
-            final NormalizedNodeWriter nnWriter = NormalizedNodeWriter.forStreamWriter(nnStreamWriter);
-            nnWriter.write(input.getBody());
-            nnWriter.flush();
-
-            xmlStreamWriter.writeEndElement();
-            xmlStreamWriter.writeEndDocument();
-            xmlStreamWriter.flush();
-
-            nnWriter.close();
-
-            return writer.toString();
+        try {
+            final var xmlStreamWriter = NotificationFormatter.createStreamWriterWithNotification(writer, now);
+            final var nnStreamWriter = XMLStreamNormalizedNodeStreamWriter.create(xmlStreamWriter, schemaContext,
+                input.getType());
+
+            try (var nnWriter = NormalizedNodeWriter.forStreamWriter(nnStreamWriter)) {
+                nnWriter.write(input.getBody());
+                nnWriter.flush();
+
+                xmlStreamWriter.writeEndElement();
+                xmlStreamWriter.writeEndDocument();
+                xmlStreamWriter.flush();
+            }
         } catch (XMLStreamException e) {
             throw new IOException("Failed to write notification content", e);
         }
+
+        return writer.toString();
     }
-}
+}
\ No newline at end of file