1212import java .util .List ;
1313import java .util .Set ;
1414import org .eclipse .jdt .annotation .NonNull ;
15- import org .opendaylight .mdsal .binding .api .DataObjectModification ;
15+ import org .opendaylight .mdsal .binding .api .DataObjectDeleted ;
16+ import org .opendaylight .mdsal .binding .api .DataObjectModification .WithDataAfter ;
1617import org .opendaylight .mdsal .binding .api .DataTreeChangeListener ;
1718import org .opendaylight .mdsal .binding .api .DataTreeModification ;
1819import org .opendaylight .yang .gen .v1 .urn .tbd .params .xml .ns .yang .network .topology .rev131021 .NetworkTopology ;
@@ -36,49 +37,43 @@ final class TopologyDataTreeChangeListener implements DataTreeChangeListener<Net
3637
3738 @ Override
3839 public void onDataTreeChanged (@ NonNull List <DataTreeModification <NetworkTopology >> changes ) {
39- changes .stream (). forEach (change -> {
40- DataObjectModification . ModificationType modificationType = change .getRootNode (). getModificationType ();
40+ changes .forEach (change -> {
41+ final var rootNode = change .getRootNode ();
4142 Set <TopologyId > ids = new HashSet <>();
42- final NetworkTopology dataBefore = change .getRootNode ().getDataBefore ();
43- final NetworkTopology dataAfter = change .getRootNode ().getDataAfter ();
44- if (DataObjectModification .ModificationType .DELETE .equals (modificationType )) {
45-
46- LOG .info ("Data has been deleted" );
47-
48- notificationForDeletedData (dataBefore , dataAfter , ids );
49- } else if (DataObjectModification .ModificationType .SUBTREE_MODIFIED .equals (modificationType )
50- || DataObjectModification .ModificationType .WRITE .equals (modificationType )) {
51-
52- int sizeOfDataBefore = 0 ;
53- int sizeOfDataAfter = 0 ;
54-
55- if (dataBefore != null ) {
56- sizeOfDataBefore = dataBefore .getTopology ().size ();
57- }
58-
59- if (dataAfter != null ) {
60- sizeOfDataAfter = dataAfter .getTopology ().size ();
61- }
62-
63- if (sizeOfDataBefore < sizeOfDataAfter ) {
64- LOG .info ("Data has been created" );
43+ switch (rootNode ) {
44+ case WithDataAfter <NetworkTopology > written -> {
45+ final var dataBefore = written .dataBefore ();
46+ final var dataAfter = written .dataAfter ();
47+ int sizeOfDataBefore = 0 ;
48+ int sizeOfDataAfter = dataAfter .nonnullTopology ().size ();
6549 if (dataBefore != null ) {
66- dataBefore .nonnullTopology ().values (). forEach ( topology -> ids . add ( topology . getTopologyId ()) );
50+ sizeOfDataBefore = dataBefore .nonnullTopology ().size ( );
6751 }
6852
69- if (dataAfter != null ) {
53+ if (sizeOfDataBefore < sizeOfDataAfter ) {
54+ LOG .info ("Data has been created" );
55+ if (dataBefore != null ) {
56+ dataBefore .nonnullTopology ().values ().forEach (
57+ topology -> ids .add (topology .getTopologyId ()));
58+ }
59+
7060 dataAfter .nonnullTopology ().values ().forEach (topology -> {
7161 if (!ids .contains (topology .getTopologyId ())) {
7262 notificationPublishService .publish (new NewTopologyCreatedBuilder ()
73- .setTopologyId (topology .getTopologyId ())
74- .build (), NewTopologyCreated .QNAME );
63+ .setTopologyId (topology .getTopologyId ())
64+ .build (), NewTopologyCreated .QNAME );
7565 }
7666 });
67+ } else {
68+ LOG .info ("Data has been modified" );
69+ notificationForDeletedData (dataBefore , dataAfter , ids );
7770 }
78- } else {
79- LOG .info ("Data has been modified" );
80- notificationForDeletedData (dataBefore , dataAfter , ids );
8171 }
72+ case DataObjectDeleted <NetworkTopology > deleted -> {
73+ LOG .info ("Data has been deleted" );
74+ notificationForDeletedData (deleted .dataBefore (), null , ids );
75+ }
76+ default -> LOG .warn ("Unsupported tree modification received, {}" , rootNode .dataType ());
8277 }
8378 });
8479 }
0 commit comments