--- /dev/null
+module augment-iip-module {
+ namespace "augment:instance:identifier:patch:module";
+ prefix "aiipmodule";
+
+ import instance-identifier-patch-module {
+ prefix imodule; revision-date 2015-11-21;
+ }
+
+ revision 2022-02-18 {
+ }
+
+ augment "/imodule:patch-cont" {
+ choice patch-choice1 {
+ case patch-case1 {
+ leaf case-leaf1 {
+ type string;
+ }
+ }
+ case patch-case2 {
+ leaf case-leaf2 {
+ type int64;
+ }
+ }
+ }
+ leaf leaf1 {
+ type string;
+ }
+ }
+}
\ No newline at end of file
@Override
String createText(final EffectiveModelContext schemaContext, final Collection<DataTreeCandidate> input,
- final Instant now, boolean leafNodesOnly, boolean skipData)
+ final Instant now, final boolean leafNodesOnly, final boolean skipData)
throws IOException {
final Writer writer = new StringWriter();
final JsonWriter jsonWriter = new JsonWriter(writer).beginObject();
jsonWriter.name("data-change-event").beginArray();
final JsonDataTreeCandidateSerializer serializer =
- new JsonDataTreeCandidateSerializer(codecSupplier, schemaContext, jsonWriter);
+ new JsonDataTreeCandidateSerializer(schemaContext, codecSupplier, jsonWriter);
for (final DataTreeCandidate candidate : input) {
serializer.serialize(candidate, leafNodesOnly, skipData);
}
*/
package org.opendaylight.restconf.common.serializer;
+import static com.google.common.base.Verify.verifyNotNull;
+import static java.util.Objects.requireNonNull;
+
import java.util.ArrayDeque;
import java.util.Collection;
import java.util.Deque;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode;
import org.opendaylight.yangtools.yang.data.api.schema.tree.ModificationType;
+import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
+import org.opendaylight.yangtools.yang.model.api.SchemaPath;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public abstract class AbstractWebsocketSerializer<T extends Exception> {
-
private static final Logger LOG = LoggerFactory.getLogger(AbstractWebsocketSerializer.class);
- public void serialize(final DataTreeCandidate candidate, final boolean leafNodesOnly, final boolean skipData)
+ private final EffectiveModelContext context;
+
+ protected AbstractWebsocketSerializer(final EffectiveModelContext context) {
+ this.context = requireNonNull(context);
+ }
+
+ public final void serialize(final DataTreeCandidate candidate, final boolean leafNodesOnly, final boolean skipData)
throws T {
final Deque<PathArgument> path = new ArrayDeque<>();
path.addAll(candidate.getRootPath().getPathArguments());
}
}
- abstract void serializeData(Collection<PathArgument> path, DataTreeCandidateNode candidate, boolean skipData)
- throws T;
+ private void serializeData(final Collection<PathArgument> dataPath, final DataTreeCandidateNode candidate,
+ final boolean skipData) throws T {
+ var current = DataSchemaContextTree.from(context).getRoot();
+ for (var arg : dataPath) {
+ final var next = verifyNotNull(current.getChild(arg),
+ "Failed to resolve %s: cannot find %s in %s", dataPath, arg, current);
+ current = next;
+ }
+ final var schemaPath = verifyNotNull(current.getDataSchemaNode(),
+ "Path %s resolved to non-data %s", dataPath, current).getPath();
+ serializeData(context, schemaPath, dataPath, candidate, skipData);
+ }
+
+ abstract void serializeData(EffectiveModelContext context, SchemaPath schemaPath, Collection<PathArgument> dataPath,
+ DataTreeCandidateNode candidate, boolean skipData) throws T;
abstract void serializePath(Collection<PathArgument> pathArguments) throws T;
final StringBuilder pathBuilder = new StringBuilder();
for (PathArgument pathArgument : path) {
+ if (pathArgument instanceof YangInstanceIdentifier.AugmentationIdentifier) {
+ continue;
+ }
pathBuilder.append("/");
- pathBuilder.append(pathArgument.getNodeType().getNamespace().toString().replaceAll(":", "-"));
+ pathBuilder.append(pathArgument.getNodeType().getNamespace().toString().replace(':', '-'));
pathBuilder.append(":");
pathBuilder.append(pathArgument.getNodeType().getLocalName());
final Set<Map.Entry<QName, Object>> keys =
((YangInstanceIdentifier.NodeIdentifierWithPredicates) pathArgument).entrySet();
for (Map.Entry<QName, Object> key : keys) {
- pathBuilder.append(key.getKey().getNamespace().toString().replaceAll(":", "-"));
+ pathBuilder.append(key.getKey().getNamespace().toString().replace(':', '-'));
pathBuilder.append(":");
pathBuilder.append(key.getKey().getLocalName());
pathBuilder.append("='");
*/
package org.opendaylight.restconf.common.serializer;
+import static java.util.Objects.requireNonNull;
+
import com.google.gson.stream.JsonWriter;
import java.io.IOException;
import java.util.Collection;
-import java.util.stream.Collectors;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
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.api.schema.tree.DataTreeCandidateNode;
import org.opendaylight.yangtools.yang.model.api.SchemaPath;
public class JsonDataTreeCandidateSerializer extends AbstractWebsocketSerializer<IOException> {
-
private final JSONCodecFactorySupplier codecSupplier;
- private final EffectiveModelContext context;
private final JsonWriter jsonWriter;
- public JsonDataTreeCandidateSerializer(final JSONCodecFactorySupplier codecSupplier,
- final EffectiveModelContext context,
- final JsonWriter jsonWriter) {
-
- this.codecSupplier = codecSupplier;
- this.context = context;
- this.jsonWriter = jsonWriter;
+ public JsonDataTreeCandidateSerializer(final EffectiveModelContext context,
+ final JSONCodecFactorySupplier codecSupplier, final JsonWriter jsonWriter) {
+ super(context);
+ this.codecSupplier = requireNonNull(codecSupplier);
+ this.jsonWriter = requireNonNull(jsonWriter);
}
- void serializeData(Collection<YangInstanceIdentifier.PathArgument> nodePath, DataTreeCandidateNode candidate,
- boolean skipData)
- throws IOException {
- final SchemaPath path = SchemaPath.create(nodePath.stream()
- .filter(p -> !(p instanceof YangInstanceIdentifier.NodeIdentifierWithPredicates))
- .map(YangInstanceIdentifier.PathArgument::getNodeType).collect(Collectors.toList()), true);
- final NormalizedNodeStreamWriter nestedWriter =
- JSONNormalizedNodeStreamWriter
- .createNestedWriter(codecSupplier.getShared(context), path.getParent(), null, jsonWriter);
-
+ @Override
+ void serializeData(final EffectiveModelContext context, final SchemaPath schemaPath,
+ final Collection<PathArgument> dataPath, final DataTreeCandidateNode candidate, final boolean skipData)
+ throws IOException {
+ NormalizedNodeStreamWriter nestedWriter = JSONNormalizedNodeStreamWriter.createNestedWriter(
+ codecSupplier.getShared(context), schemaPath.getParent(), null, jsonWriter);
jsonWriter.beginObject();
- serializePath(nodePath);
+ serializePath(dataPath);
if (!skipData && candidate.getDataAfter().isPresent()) {
jsonWriter.name("data").beginObject();
}
@Override
- void serializePath(Collection<YangInstanceIdentifier.PathArgument> pathArguments)
+ void serializePath(final Collection<YangInstanceIdentifier.PathArgument> pathArguments)
throws IOException {
jsonWriter.name("path").value(convertPath(pathArguments));
}
*/
package org.opendaylight.restconf.common.serializer;
+import static java.util.Objects.requireNonNull;
import static org.opendaylight.restconf.common.formatters.XMLNotificationFormatter.DATA_CHANGE_EVENT_ELEMENT;
import java.util.Collection;
-import java.util.stream.Collectors;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
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.model.api.SchemaPath;
public class XmlDataTreeCandidateSerializer extends AbstractWebsocketSerializer<Exception> {
-
- private final EffectiveModelContext context;
private final XMLStreamWriter xmlWriter;
- public XmlDataTreeCandidateSerializer(EffectiveModelContext context, XMLStreamWriter xmlWriter) {
- this.context = context;
- this.xmlWriter = xmlWriter;
+ public XmlDataTreeCandidateSerializer(final EffectiveModelContext context, final XMLStreamWriter xmlWriter) {
+ super(context);
+ this.xmlWriter = requireNonNull(xmlWriter);
}
@Override
- void serializeData(Collection<PathArgument> nodePath, DataTreeCandidateNode candidate, boolean skipData)
- throws Exception {
- final SchemaPath path = SchemaPath.create(nodePath.stream()
- .filter(p -> !(p instanceof YangInstanceIdentifier.NodeIdentifierWithPredicates))
- .map(PathArgument::getNodeType).collect(Collectors.toList()), true);
- final NormalizedNodeStreamWriter nodeStreamWriter =
- XMLStreamNormalizedNodeStreamWriter.create(xmlWriter, context, path.getParent());
-
+ void serializeData(final EffectiveModelContext context, final SchemaPath schemaPath,
+ final Collection<PathArgument> nodePath, final DataTreeCandidateNode candidate, final boolean skipData)
+ throws Exception {
+ NormalizedNodeStreamWriter nodeStreamWriter = XMLStreamNormalizedNodeStreamWriter.create(xmlWriter, context,
+ schemaPath.getParent());
xmlWriter.writeStartElement(DATA_CHANGE_EVENT_ELEMENT);
serializePath(nodePath);
}
@Override
- public void serializePath(Collection<PathArgument> pathArguments) throws XMLStreamException {
+ public void serializePath(final Collection<PathArgument> pathArguments) throws XMLStreamException {
xmlWriter.writeStartElement("path");
xmlWriter.writeCharacters(convertPath(pathArguments));
xmlWriter.writeEndElement();
}
@Override
- public void serializeOperation(DataTreeCandidateNode candidate) throws XMLStreamException {
+ public void serializeOperation(final DataTreeCandidateNode candidate) throws XMLStreamException {
xmlWriter.writeStartElement("operation");
xmlWriter.writeCharacters(modificationTypeToOperation(candidate, candidate.getModificationType()));
xmlWriter.writeEndElement();
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
+import java.util.Map;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import org.json.JSONException;
import org.opendaylight.restconf.nb.rfc8040.SkipNotificationDataParam;
import org.opendaylight.restconf.nb.rfc8040.StartTimeParam;
import org.opendaylight.restconf.nb.rfc8040.handlers.SchemaContextHandler;
+import org.opendaylight.yang.gen.v1.augment.instance.identifier.patch.module.rev220218.PatchCont1Builder;
+import org.opendaylight.yang.gen.v1.augment.instance.identifier.patch.module.rev220218.patch.cont.patch.choice1.PatchCase1Builder;
import org.opendaylight.yang.gen.v1.instance.identifier.patch.module.rev151121.PatchCont;
+import org.opendaylight.yang.gen.v1.instance.identifier.patch.module.rev151121.PatchContBuilder;
import org.opendaylight.yang.gen.v1.instance.identifier.patch.module.rev151121.patch.cont.MyList1;
import org.opendaylight.yang.gen.v1.instance.identifier.patch.module.rev151121.patch.cont.MyList1Builder;
import org.opendaylight.yang.gen.v1.instance.identifier.patch.module.rev151121.patch.cont.MyList1Key;
@BeforeClass
public static void beforeClass() {
- SCHEMA_CONTEXT = YangParserTestUtils.parseYangResource(
- "/instanceidentifier/yang/instance-identifier-patch-module.yang");
+ SCHEMA_CONTEXT = YangParserTestUtils.parseYangResourceDirectory(
+ "/instanceidentifier/yang");
}
@AfterClass
changeService.registerDataTreeChangeListener(root, adapter);
WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction();
- MyList1Builder builder = new MyList1Builder().setMyLeaf11("Jed").setName("Althea");
- final InstanceIdentifier<MyList1> iid = InstanceIdentifier.create(PatchCont.class)
- .child(MyList1.class, new MyList1Key("Althea"));
+ final InstanceIdentifier<PatchCont> iid = InstanceIdentifier.create(PatchCont.class);
+ PatchContBuilder builder =
+ new PatchContBuilder()
+ .addAugmentation(
+ new PatchCont1Builder()
+ .setPatchChoice1(new PatchCase1Builder().setCaseLeaf1("ChoiceLeaf").build())
+ .setLeaf1("AugmentLeaf").build())
+ .setMyList1(
+ Map.of(new MyList1Key("Althea"),
+ new MyList1Builder().setMyLeaf11("Jed").setName("Althea").build())
+ );
writeTransaction.mergeParentStructurePut(LogicalDatastoreType.CONFIGURATION, iid, builder.build());
writeTransaction.commit();
adapter.assertGot(getNotifJson(JSON_NOTIF_LEAVES_CREATE));
writeTransaction = dataBroker.newWriteOnlyTransaction();
- builder = new MyList1Builder().withKey(new MyList1Key("Althea")).setMyLeaf12("Bertha");
+ builder = new PatchContBuilder()
+ .addAugmentation(
+ new PatchCont1Builder()
+ .setPatchChoice1(new PatchCase1Builder().setCaseLeaf1("ChoiceUpdate").build())
+ .setLeaf1("AugmentLeaf").build())
+ .setMyList1(
+ Map.of(new MyList1Key("Althea"),
+ new MyList1Builder().setMyLeaf12("Bertha").setName("Althea").build())
+ );
writeTransaction.mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION, iid, builder.build());
writeTransaction.commit();
adapter.assertGot(getNotifJson(JSON_NOTIF_LEAVES_UPDATE));
DOMDataTreeIdentifier root = new DOMDataTreeIdentifier(LogicalDatastoreType.CONFIGURATION, PATCH_CONT_YIID);
changeService.registerDataTreeChangeListener(root, adapter);
WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction();
- MyList1Builder builder = new MyList1Builder().setMyLeaf11("Jed").setName("Althea");
- InstanceIdentifier<MyList1> iid = InstanceIdentifier.create(PatchCont.class)
- .child(MyList1.class, new MyList1Key("Althea"));
+ final InstanceIdentifier<PatchCont> iid = InstanceIdentifier.create(PatchCont.class);
+ PatchContBuilder builder = new PatchContBuilder()
+ .addAugmentation(
+ new PatchCont1Builder()
+ .setPatchChoice1(new PatchCase1Builder().setCaseLeaf1("ChoiceLeaf").build())
+ .setLeaf1("AugmentLeaf").build())
+ .setMyList1(
+ Map.of(new MyList1Key("Althea"),
+ new MyList1Builder().setMyLeaf11("Jed").setName("Althea").build())
+ );
writeTransaction.mergeParentStructurePut(LogicalDatastoreType.CONFIGURATION, iid, builder.build());
writeTransaction.commit();
adapter.assertXmlSimilar(getResultXml(XML_NOTIF_LEAVES_CREATE));
writeTransaction = dataBroker.newWriteOnlyTransaction();
- builder = new MyList1Builder().withKey(new MyList1Key("Althea")).setMyLeaf12("Bertha");
+ builder = new PatchContBuilder()
+ .addAugmentation(
+ new PatchCont1Builder()
+ .setPatchChoice1(new PatchCase1Builder().setCaseLeaf1("ChoiceUpdate").build())
+ .setLeaf1("AugmentLeaf").build())
+ .setMyList1(
+ Map.of(new MyList1Key("Althea"),
+ new MyList1Builder().setMyLeaf12("Bertha").setName("Althea").build())
+ );
writeTransaction.mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION, iid, builder.build());
writeTransaction.commit();
adapter.assertXmlSimilar(getResultXml(XML_NOTIF_LEAVES_UPDATE));
assertTrue(notification.contains("instance-identifier-patch-module:my-leaf12"));
assertTrue(notification.contains("instance-identifier-patch-module:my-leaf11"));
assertTrue(notification.contains("instance-identifier-patch-module:name"));
+ assertTrue(notification.contains("augment-instance-identifier-patch-module:case-leaf1"));
+ assertTrue(notification.contains("augment-instance-identifier-patch-module:leaf1"));
}
}
--- /dev/null
+module augment-iip-module {
+ namespace "augment:instance:identifier:patch:module";
+ prefix "aiipmodule";
+
+ import instance-identifier-patch-module {
+ prefix imodule; revision-date 2015-11-21;
+ }
+
+ revision 2022-02-18 {
+ }
+
+ augment "/imodule:patch-cont" {
+ choice patch-choice1 {
+ case patch-case1 {
+ leaf case-leaf1 {
+ type string;
+ }
+ }
+ case patch-case2 {
+ leaf case-leaf2 {
+ type int64;
+ }
+ }
+ }
+ leaf leaf1 {
+ type string;
+ }
+ }
+
+}
\ No newline at end of file
{
- "urn-ietf-params-xml-ns-netconf-notification-1.0:notification":{
- "urn-opendaylight-params-xml-ns-yang-controller-md-sal-remote:data-changed-notification":{
- "data-change-event":[
- {
- "path":"/instance-identifier-patch-module:patch-cont/instance-identifier-patch-module:my-list1/instance-identifier-patch-module:my-list1[instance-identifier-patch-module:name='Althea']/instance-identifier-patch-module:my-leaf11",
- "data":{
- "instance-identifier-patch-module:my-leaf11":"Jed"
- },
- "operation":"created"
- },
- {
- "path":"/instance-identifier-patch-module:patch-cont/instance-identifier-patch-module:my-list1/instance-identifier-patch-module:my-list1[instance-identifier-patch-module:name='Althea']/instance-identifier-patch-module:name",
- "data":{
- "instance-identifier-patch-module:name":"Althea"
- },
- "operation":"created"
- }
- ]
+ "urn-ietf-params-xml-ns-netconf-notification-1.0:notification": {
+ "urn-opendaylight-params-xml-ns-yang-controller-md-sal-remote:data-changed-notification": {
+ "data-change-event": [
+ {
+ "path": "/instance-identifier-patch-module:patch-cont/instance-identifier-patch-module:my-list1/instance-identifier-patch-module:my-list1[instance-identifier-patch-module:name='Althea']/instance-identifier-patch-module:my-leaf11",
+ "data": {
+ "instance-identifier-patch-module:my-leaf11": "Jed"
+ },
+ "operation": "created"
},
- "event-time":"2020-10-15T13:01:29.019468+02:00"
- }
+ {
+ "path": "/instance-identifier-patch-module:patch-cont/instance-identifier-patch-module:my-list1/instance-identifier-patch-module:my-list1[instance-identifier-patch-module:name='Althea']/instance-identifier-patch-module:name",
+ "data": {
+ "instance-identifier-patch-module:name": "Althea"
+ },
+ "operation": "created"
+ },
+ {
+ "path": "/instance-identifier-patch-module:patch-cont/augment-instance-identifier-patch-module:patch-choice1/augment-instance-identifier-patch-module:case-leaf1",
+ "data": {
+ "augment-iip-module:case-leaf1": "ChoiceLeaf"
+ },
+ "operation": "created"
+ },
+ {
+ "path": "/instance-identifier-patch-module:patch-cont/augment-instance-identifier-patch-module:leaf1",
+ "data": {
+ "augment-iip-module:leaf1": "AugmentLeaf"
+ },
+ "operation": "created"
+ }
+ ]
+ },
+ "event-time": "2022-02-18T18:04:25.177143+01:00"
+ }
}
\ No newline at end of file
<notification xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0">
- <eventTime>2020-10-19T13:50:24.917103+02:00</eventTime>
+ <eventTime>2022-02-18T18:04:25.177143+01:00</eventTime>
<data-changed-notification xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote">
<data-change-event>
- <path>/instance-identifier-patch-module:patch-cont/instance-identifier-patch-module:my-list1/instance-identifier-patch-module:my-list1[instance-identifier-patch-module:name='Althea']/instance-identifier-patch-module:my-leaf11</path>
+ <path>
+ /instance-identifier-patch-module:patch-cont/instance-identifier-patch-module:my-list1/instance-identifier-patch-module:my-list1[instance-identifier-patch-module:name='Althea']/instance-identifier-patch-module:my-leaf11
+ </path>
<data>
<my-leaf11 xmlns="instance:identifier:patch:module">Jed</my-leaf11>
</data>
<operation>created</operation>
</data-change-event>
<data-change-event>
- <path>/instance-identifier-patch-module:patch-cont/instance-identifier-patch-module:my-list1/instance-identifier-patch-module:my-list1[instance-identifier-patch-module:name='Althea']/instance-identifier-patch-module:name</path>
+ <path>
+ /instance-identifier-patch-module:patch-cont/instance-identifier-patch-module:my-list1/instance-identifier-patch-module:my-list1[instance-identifier-patch-module:name='Althea']/instance-identifier-patch-module:name
+ </path>
<data>
<name xmlns="instance:identifier:patch:module">Althea</name>
</data>
<operation>created</operation>
</data-change-event>
+ <data-change-event>
+ <path>
+ /instance-identifier-patch-module:patch-cont/augment-instance-identifier-patch-module:patch-choice1/augment-instance-identifier-patch-module:case-leaf1
+ </path>
+ <data>
+ <case-leaf1 xmlns="augment:instance:identifier:patch:module">ChoiceLeaf</case-leaf1>
+ </data>
+ <operation>created</operation>
+ </data-change-event>
+ <data-change-event>
+ <path>/instance-identifier-patch-module:patch-cont/augment-instance-identifier-patch-module:leaf1</path>
+ <data>
+ <leaf1 xmlns="augment:instance:identifier:patch:module">AugmentLeaf</leaf1>
+ </data>
+ <operation>created</operation>
+ </data-change-event>
</data-changed-notification>
</notification>
\ No newline at end of file
{
- "urn-ietf-params-xml-ns-netconf-notification-1.0:notification":{
- "urn-opendaylight-params-xml-ns-yang-controller-md-sal-remote:data-changed-notification":{
- "data-change-event": [
- {
- "operation": "deleted",
- "path": "/instance-identifier-patch-module:patch-cont/instance-identifier-patch-module:my-list1/instance-identifier-patch-module:my-list1[instance-identifier-patch-module:name='Althea']/instance-identifier-patch-module:my-leaf11"
- },
- {
- "operation": "deleted",
- "path": "/instance-identifier-patch-module:patch-cont/instance-identifier-patch-module:my-list1/instance-identifier-patch-module:my-list1[instance-identifier-patch-module:name='Althea']/instance-identifier-patch-module:name"
- },
- {
- "operation": "deleted",
- "path": "/instance-identifier-patch-module:patch-cont/instance-identifier-patch-module:my-list1/instance-identifier-patch-module:my-list1[instance-identifier-patch-module:name='Althea']/instance-identifier-patch-module:my-leaf12"
- }
- ],
+ "urn-ietf-params-xml-ns-netconf-notification-1.0:notification": {
+ "urn-opendaylight-params-xml-ns-yang-controller-md-sal-remote:data-changed-notification": {
+ "data-change-event": [
+ {
+ "path": "/instance-identifier-patch-module:patch-cont/instance-identifier-patch-module:my-list1/instance-identifier-patch-module:my-list1[instance-identifier-patch-module:name='Althea']/instance-identifier-patch-module:my-leaf11",
+ "operation": "deleted"
},
- "event-time": "2017-09-18T15:30:16.099+03:00",
- }
-}
+ {
+ "path": "/instance-identifier-patch-module:patch-cont/instance-identifier-patch-module:my-list1/instance-identifier-patch-module:my-list1[instance-identifier-patch-module:name='Althea']/instance-identifier-patch-module:name",
+ "operation": "deleted"
+ },
+ {
+ "path": "/instance-identifier-patch-module:patch-cont/instance-identifier-patch-module:my-list1/instance-identifier-patch-module:my-list1[instance-identifier-patch-module:name='Althea']/instance-identifier-patch-module:my-leaf12",
+ "operation": "deleted"
+ },
+ {
+ "path": "/instance-identifier-patch-module:patch-cont/augment-instance-identifier-patch-module:patch-choice1/augment-instance-identifier-patch-module:case-leaf1",
+ "operation": "deleted"
+ },
+ {
+ "path": "/instance-identifier-patch-module:patch-cont/augment-instance-identifier-patch-module:leaf1",
+ "operation": "deleted"
+ }
+ ]
+ },
+ "event-time": "2022-02-18T18:07:48.662524+01:00"
+ }
+}
\ No newline at end of file
--- /dev/null
+<notification xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0">
+ <eventTime>2022-02-18T18:07:48.662524+01:00</eventTime>
+ <data-changed-notification xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote">
+ <data-change-event>
+ <path>
+ /instance-identifier-patch-module:patch-cont/instance-identifier-patch-module:my-list1/instance-identifier-patch-module:my-list1[instance-identifier-patch-module:name='Althea']/instance-identifier-patch-module:my-leaf11
+ </path>
+ <operation>deleted</operation>
+ </data-change-event>
+ <data-change-event>
+ <path>
+ /instance-identifier-patch-module:patch-cont/instance-identifier-patch-module:my-list1/instance-identifier-patch-module:my-list1[instance-identifier-patch-module:name='Althea']/instance-identifier-patch-module:name
+ </path>
+ <operation>deleted</operation>
+ </data-change-event>
+ <data-change-event>
+ <path>
+ /instance-identifier-patch-module:patch-cont/instance-identifier-patch-module:my-list1/instance-identifier-patch-module:my-list1[instance-identifier-patch-module:name='Althea']/instance-identifier-patch-module:my-leaf12
+ </path>
+ <operation>deleted</operation>
+ </data-change-event>
+ <data-change-event>
+ <path>
+ /instance-identifier-patch-module:patch-cont/augment-instance-identifier-patch-module:patch-choice1/augment-instance-identifier-patch-module:case-leaf1
+ </path>
+ <operation>deleted</operation>
+ </data-change-event>
+ <data-change-event>
+ <path>/instance-identifier-patch-module:patch-cont/augment-instance-identifier-patch-module:leaf1</path>
+ <operation>deleted</operation>
+ </data-change-event>
+ </data-changed-notification>
+</notification>
\ No newline at end of file
{
- "urn-ietf-params-xml-ns-netconf-notification-1.0:notification":{
- "urn-opendaylight-params-xml-ns-yang-controller-md-sal-remote:data-changed-notification":{
- "data-change-event":[
- {
- "path":"/instance-identifier-patch-module:patch-cont/instance-identifier-patch-module:my-list1/instance-identifier-patch-module:my-list1[instance-identifier-patch-module:name='Althea']/instance-identifier-patch-module:name",
- "data":{
- "instance-identifier-patch-module:name":"Althea"
- },
- "operation":"updated"
- },
- {
- "path":"/instance-identifier-patch-module:patch-cont/instance-identifier-patch-module:my-list1/instance-identifier-patch-module:my-list1[instance-identifier-patch-module:name='Althea']/instance-identifier-patch-module:my-leaf12",
- "data":{
- "instance-identifier-patch-module:my-leaf12":"Bertha"
- },
- "operation":"created"
- }
- ]
+ "urn-ietf-params-xml-ns-netconf-notification-1.0:notification": {
+ "urn-opendaylight-params-xml-ns-yang-controller-md-sal-remote:data-changed-notification": {
+ "data-change-event": [
+ {
+ "path": "/instance-identifier-patch-module:patch-cont/instance-identifier-patch-module:my-list1/instance-identifier-patch-module:my-list1[instance-identifier-patch-module:name='Althea']/instance-identifier-patch-module:name",
+ "data": {
+ "instance-identifier-patch-module:name": "Althea"
+ },
+ "operation": "updated"
},
- "event-time":"2020-10-15T13:23:29.520115+02:00"
- }
+ {
+ "path": "/instance-identifier-patch-module:patch-cont/instance-identifier-patch-module:my-list1/instance-identifier-patch-module:my-list1[instance-identifier-patch-module:name='Althea']/instance-identifier-patch-module:my-leaf12",
+ "data": {
+ "instance-identifier-patch-module:my-leaf12": "Bertha"
+ },
+ "operation": "created"
+ },
+ {
+ "path": "/instance-identifier-patch-module:patch-cont/augment-instance-identifier-patch-module:patch-choice1/augment-instance-identifier-patch-module:case-leaf1",
+ "data": {
+ "augment-iip-module:case-leaf1": "ChoiceUpdate"
+ },
+ "operation": "updated"
+ },
+ {
+ "path": "/instance-identifier-patch-module:patch-cont/augment-instance-identifier-patch-module:leaf1",
+ "data": {
+ "augment-iip-module:leaf1": "AugmentLeaf"
+ },
+ "operation": "updated"
+ }
+ ]
+ },
+ "event-time": "2022-02-18T18:04:25.214583+01:00"
+ }
}
\ No newline at end of file
<notification xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0">
- <eventTime>2020-10-19T13:54:31.86969+02:00</eventTime>
+ <eventTime>2022-02-18T18:04:25.214583+01:00</eventTime>
<data-changed-notification xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote">
<data-change-event>
- <path>/instance-identifier-patch-module:patch-cont/instance-identifier-patch-module:my-list1/instance-identifier-patch-module:my-list1[instance-identifier-patch-module:name='Althea']/instance-identifier-patch-module:name</path>
+ <path>
+ /instance-identifier-patch-module:patch-cont/instance-identifier-patch-module:my-list1/instance-identifier-patch-module:my-list1[instance-identifier-patch-module:name='Althea']/instance-identifier-patch-module:name
+ </path>
<data>
<name xmlns="instance:identifier:patch:module">Althea</name>
</data>
<operation>updated</operation>
</data-change-event>
<data-change-event>
- <path>/instance-identifier-patch-module:patch-cont/instance-identifier-patch-module:my-list1/instance-identifier-patch-module:my-list1[instance-identifier-patch-module:name='Althea']/instance-identifier-patch-module:my-leaf12</path>
+ <path>
+ /instance-identifier-patch-module:patch-cont/instance-identifier-patch-module:my-list1/instance-identifier-patch-module:my-list1[instance-identifier-patch-module:name='Althea']/instance-identifier-patch-module:my-leaf12
+ </path>
<data>
<my-leaf12 xmlns="instance:identifier:patch:module">Bertha</my-leaf12>
</data>
<operation>created</operation>
</data-change-event>
+ <data-change-event>
+ <path>
+ /instance-identifier-patch-module:patch-cont/augment-instance-identifier-patch-module:patch-choice1/augment-instance-identifier-patch-module:case-leaf1
+ </path>
+ <data>
+ <case-leaf1 xmlns="augment:instance:identifier:patch:module">ChoiceUpdate</case-leaf1>
+ </data>
+ <operation>updated</operation>
+ </data-change-event>
+ <data-change-event>
+ <path>/instance-identifier-patch-module:patch-cont/augment-instance-identifier-patch-module:leaf1</path>
+ <data>
+ <leaf1 xmlns="augment:instance:identifier:patch:module">AugmentLeaf</leaf1>
+ </data>
+ <operation>updated</operation>
+ </data-change-event>
</data-changed-notification>
</notification>
\ No newline at end of file