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