Refactor Networkmodel PortMappingListener
[transportpce.git] / networkmodel / src / main / java / org / opendaylight / transportpce / networkmodel / listeners / PortMappingListener.java
index 9df4f9b06388a5aa0e022da864507755cba537fe..5122c39c24e3e624761b33f9806976e7745ac7b5 100644 (file)
@@ -7,23 +7,20 @@
  */
 package org.opendaylight.transportpce.networkmodel.listeners;
 
-import java.util.Collection;
 import java.util.LinkedList;
+import java.util.List;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
+import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.transportpce.networkmodel.service.NetworkModelService;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220114.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220114.network.Nodes;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.Nodes;
+import org.opendaylight.yangtools.yang.binding.DataObjectStep;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 public class PortMappingListener implements DataTreeChangeListener<Mapping> {
 
-    private static final Logger LOG = LoggerFactory.getLogger(PortMappingListener.class);
-
     private final NetworkModelService networkModelService;
 
     public PortMappingListener(NetworkModelService networkModelService) {
@@ -31,25 +28,31 @@ public class PortMappingListener implements DataTreeChangeListener<Mapping> {
     }
 
     @Override
-    public void onDataTreeChanged(@NonNull Collection<DataTreeModification<Mapping>> changes) {
+    public void onDataTreeChanged(@NonNull List<DataTreeModification<Mapping>> changes) {
         for (DataTreeModification<Mapping> change : changes) {
-            if (change.getRootNode().getDataBefore() != null && change.getRootNode().getDataAfter() != null) {
-                Mapping oldMapping = change.getRootNode().getDataBefore();
-                Mapping newMapping = change.getRootNode().getDataAfter();
-                if (oldMapping.getPortAdminState().equals(newMapping.getPortAdminState())
-                    || oldMapping.getPortOperState().equals(newMapping.getPortOperState())) {
-                    return;
-                } else {
-                    LinkedList<PathArgument> path = new LinkedList<>();
-                    path.addAll((Collection<? extends PathArgument>) change.getRootPath().getRootIdentifier()
-                        .getPathArguments());
-                    path.removeLast();
-                    @SuppressWarnings("unchecked") InstanceIdentifier<Nodes> portmappintNodeID =
-                        (InstanceIdentifier<Nodes>) InstanceIdentifier.create(path);
-                    String nodeId = InstanceIdentifier.keyOf(portmappintNodeID).getNodeId();
-                    networkModelService.updateOpenRoadmTopologies(nodeId, newMapping);
-                }
+            Mapping oldMapping = change.getRootNode().dataBefore();
+            if (oldMapping == null) {
+                continue;
+            }
+            Mapping newMapping = change.getRootNode().dataAfter();
+            if (newMapping == null) {
+                continue;
+            }
+            if (oldMapping.getPortAdminState().equals(newMapping.getPortAdminState())
+                    && oldMapping.getPortOperState().equals(newMapping.getPortOperState())) {
+                return;
             }
+            networkModelService.updateOpenRoadmTopologies(
+                getNodeIdFromMappingDataTreeIdentifier(change.getRootPath()),
+                newMapping);
         }
     }
+
+    protected String getNodeIdFromMappingDataTreeIdentifier(DataTreeIdentifier<Mapping> dataTreeIdentifier) {
+        LinkedList<DataObjectStep<?>> path = new LinkedList<>();
+        dataTreeIdentifier.path().getPathArguments().forEach(p -> path.add(p));
+        path.removeLast();
+        InstanceIdentifier<Nodes> portMappingNodeID = InstanceIdentifier.unsafeOf(path);
+        return InstanceIdentifier.keyOf(portMappingNodeID).getNodeId();
+    }
 }