- public String getOutputType() {
- return this.outputType.getName();
- }
-
- /**
- * Get path pointed to data in data store.
- *
- * @return Path pointed to data in data store.
- */
- public YangInstanceIdentifier getPath() {
- return this.path;
- }
-
- /**
- * Prepare data of notification and data to client.
- *
- * @param xml data
- */
- private void prepareAndPostData(final String xml) {
- final Event event = new Event(EventType.NOTIFY);
- if (this.outputType.equals(NotificationOutputType.JSON)) {
- event.setData(XML.toJSONObject(xml).toString());
- } else {
- event.setData(xml);
- }
- post(event);
- }
-
- /**
- * Tracks events of data change by customer.
- */
-
- /**
- * Prepare data in printable form and transform it to String.
- *
- * @param dataTreeCandidates the DataTreeCandidates to transform
- *
- * @return Data in printable form.
- */
- private String prepareXml(final Collection<DataTreeCandidate> dataTreeCandidates) {
- final SchemaContext schemaContext = schemaHandler.get();
- final DataSchemaContextTree dataContextTree = DataSchemaContextTree.from(schemaContext);
- final Document doc = createDocument();
- final Element notificationElement = basePartDoc(doc);
-
- final Element dataChangedNotificationEventElement = doc.createElementNS(
- "urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote", "data-changed-notification");
-
- addValuesToDataChangedNotificationEventElement(doc, dataChangedNotificationEventElement, dataTreeCandidates,
- schemaContext, dataContextTree);
- notificationElement.appendChild(dataChangedNotificationEventElement);
- return transformDoc(doc);
- }
-
- /**
- * Adds values to data changed notification event element.
- */
- @SuppressWarnings("checkstyle:hiddenField")
- private void addValuesToDataChangedNotificationEventElement(final Document doc,
- final Element dataChangedNotificationEventElement,
- final Collection<DataTreeCandidate> dataTreeCandidates,
- final SchemaContext schemaContext, final DataSchemaContextTree dataSchemaContextTree) {
-
- for (DataTreeCandidate dataTreeCandidate : dataTreeCandidates) {
- DataTreeCandidateNode candidateNode = dataTreeCandidate.getRootNode();
- if (candidateNode == null) {
- continue;
- }
- YangInstanceIdentifier yiid = dataTreeCandidate.getRootPath();
- addNodeToDataChangeNotificationEventElement(doc, dataChangedNotificationEventElement, candidateNode,
- yiid.getParent(), schemaContext, dataSchemaContextTree);
- }
- }
-
- private void addNodeToDataChangeNotificationEventElement(final Document doc,
- final Element dataChangedNotificationEventElement, final DataTreeCandidateNode candidateNode,
- final YangInstanceIdentifier parentYiid, final SchemaContext schemaContext,
- final DataSchemaContextTree dataSchemaContextTree) {
-
- Optional<NormalizedNode<?,?>> optionalNormalizedNode = Optional.empty();
- switch (candidateNode.getModificationType()) {
- case APPEARED:
- case SUBTREE_MODIFIED:
- case WRITE:
- optionalNormalizedNode = candidateNode.getDataAfter();
- break;
- case DELETE:
- case DISAPPEARED:
- optionalNormalizedNode = candidateNode.getDataBefore();
- break;
- case UNMODIFIED:
- default:
- break;
- }
-
- if (!optionalNormalizedNode.isPresent()) {
- LOG.error("No node present in notification for {}", candidateNode);