public class ListenerAdapter extends AbstractCommonSubscriber implements ClusteredDOMDataTreeChangeListener {
private static final Logger LOG = LoggerFactory.getLogger(ListenerAdapter.class);
+ private static final String DATA_CHANGE_EVENT = "data-change-event";
+ private static final String PATH = "path";
+ private static final String OPERATION = "operation";
private final YangInstanceIdentifier path;
private final String streamName;
continue;
}
YangInstanceIdentifier yiid = dataTreeCandidate.getRootPath();
- addNodeToDataChangeNotificationEventElement(doc, dataChangedNotificationEventElement, candidateNode,
- yiid.getParent(), schemaContext, dataSchemaContextTree);
+ boolean isSkipNotificationData = this.isSkipNotificationData();
+ if (isSkipNotificationData) {
+ createCreatedChangedDataChangeEventElementWithoutData(doc, dataChangedNotificationEventElement,
+ dataTreeCandidate.getRootNode(), schemaContext);
+ } else {
+ addNodeToDataChangeNotificationEventElement(doc, dataChangedNotificationEventElement, candidateNode,
+ yiid.getParent(), schemaContext, dataSchemaContextTree);
+ }
}
}
break;
case DELETE:
case DISAPPEARED:
- node = createDataChangeEventElement(doc, yiid, schemaContext);
+ node = createDataChangeEventElement(doc, yiid, schemaContext, Operation.DELETED);
break;
case UNMODIFIED:
default:
*
* @param doc {@link Document}
* @param schemaContext Schema context.
+ * @param operation Operation value
* @return {@link Node} represented by changed event element.
*/
private static Node createDataChangeEventElement(final Document doc, final YangInstanceIdentifier eventPath,
- final SchemaContext schemaContext) {
- final Element dataChangeEventElement = doc.createElement("data-change-event");
- final Element pathElement = doc.createElement("path");
+ final SchemaContext schemaContext, Operation operation) {
+ final Element dataChangeEventElement = doc.createElement(DATA_CHANGE_EVENT);
+ final Element pathElement = doc.createElement(PATH);
addPathAsValueToElement(eventPath, pathElement, schemaContext);
dataChangeEventElement.appendChild(pathElement);
- final Element operationElement = doc.createElement("operation");
- operationElement.setTextContent(Operation.DELETED.value);
+ final Element operationElement = doc.createElement(OPERATION);
+ operationElement.setTextContent(operation.value);
dataChangeEventElement.appendChild(operationElement);
return dataChangeEventElement;
}
+ /**
+ * Creates data change notification element without data element.
+ *
+ * @param doc
+ * {@link Document}
+ * @param dataChangedNotificationEventElement
+ * {@link Element}
+ * @param candidateNode
+ * {@link DataTreeCandidateNode}
+ */
+ private void createCreatedChangedDataChangeEventElementWithoutData(final Document doc,
+ final Element dataChangedNotificationEventElement, final DataTreeCandidateNode candidateNode,
+ final SchemaContext schemaContext) {
+ final Operation operation;
+ switch (candidateNode.getModificationType()) {
+ case APPEARED:
+ case SUBTREE_MODIFIED:
+ case WRITE:
+ operation = candidateNode.getDataBefore().isPresent() ? Operation.UPDATED : Operation.CREATED;
+ break;
+ case DELETE:
+ case DISAPPEARED:
+ operation = Operation.DELETED;
+ break;
+ case UNMODIFIED:
+ default:
+ return;
+ }
+ Node dataChangeEventElement = createDataChangeEventElement(doc, getPath(), schemaContext, operation);
+ dataChangedNotificationEventElement.appendChild(dataChangeEventElement);
+ }
+
private Node createCreatedChangedDataChangeEventElement(final Document doc, final YangInstanceIdentifier eventPath,
final NormalizedNode<?, ?> normalized, final Operation operation, final SchemaContext schemaContext,
final DataSchemaContextTree dataSchemaContextTree) {
- final Element dataChangeEventElement = doc.createElement("data-change-event");
- final Element pathElement = doc.createElement("path");
+ final Element dataChangeEventElement = doc.createElement(DATA_CHANGE_EVENT);
+ final Element pathElement = doc.createElement(PATH);
addPathAsValueToElement(eventPath, pathElement, schemaContext);
dataChangeEventElement.appendChild(pathElement);
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
- .add("path", path)
+ .add(PATH, path)
.add("stream-name", streamName)
.add("output-type", outputType)
.toString();
}
-}
\ No newline at end of file
+}