New version of yang transportpce-renderer
[transportpce.git] / servicehandler / src / main / java / org / opendaylight / transportpce / servicehandler / listeners / RendererListenerImpl.java
index cbe3db8c12a0726c0dd4cb44cbc6646f99fcb518..e1dc134f3f0ca2ff16974bee0d998758665ece4d 100644 (file)
@@ -7,14 +7,15 @@
  */
 package org.opendaylight.transportpce.servicehandler.listeners;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import org.opendaylight.mdsal.binding.api.NotificationPublishService;
 import org.opendaylight.transportpce.common.OperationResult;
 import org.opendaylight.transportpce.pce.service.PathComputationService;
 import org.opendaylight.transportpce.servicehandler.ServiceInput;
 import org.opendaylight.transportpce.servicehandler.service.PCEServiceWrapper;
 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017.ServiceRpcResultSp;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017.TransportpceRendererListener;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev201125.RendererRpcResultSp;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev201125.TransportpceRendererListener;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.ServiceNotificationTypes;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev181130.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev181130.AdminStates;
@@ -31,7 +32,7 @@ import org.slf4j.LoggerFactory;
 public class RendererListenerImpl implements TransportpceRendererListener {
 
     private static final Logger LOG = LoggerFactory.getLogger(RendererListenerImpl.class);
-    private ServiceRpcResultSp serviceRpcResultSp;
+    private RendererRpcResultSp serviceRpcResultSp;
     private ServiceDataStoreOperations serviceDataStoreOperations;
     private ServiceInput input;
     private PCEServiceWrapper pceServiceWrapper;
@@ -45,99 +46,146 @@ public class RendererListenerImpl implements TransportpceRendererListener {
     }
 
     @Override
-    public void onServiceRpcResultSp(ServiceRpcResultSp notification) {
-        if (!compareServiceRpcResultSp(notification)) {
-            serviceRpcResultSp = notification;
-            String serviceName = serviceRpcResultSp.getServiceName();
-            int notifType = serviceRpcResultSp.getNotificationType().getIntValue();
-            LOG.info("Renderer '{}' Notification received : {}", serviceRpcResultSp.getNotificationType().getName(),
-                    notification);
-            switch (notifType) {
-                /* service-implementation-request. */
-                case 3 :
-                    if (serviceRpcResultSp.getStatus() == RpcStatusEx.Successful) {
-                        LOG.info("Service implemented !");
-                        OperationResult operationResult = null;
-                        if (tempService) {
-                            operationResult = this.serviceDataStoreOperations.modifyTempService(
-                                    serviceRpcResultSp.getServiceName(),
-                                    State.InService, AdminStates.InService);
-                            if (!operationResult.isSuccess()) {
-                                LOG.warn("Temp Service status not updated in datastore !");
-                            }
-                        } else {
-                            operationResult = this.serviceDataStoreOperations.modifyService(
-                                    serviceRpcResultSp.getServiceName(),
-                                    State.InService, AdminStates.InService);
-                            if (!operationResult.isSuccess()) {
-                                LOG.warn("Service status not updated in datastore !");
-                            }
-                        }
-                    } else if (serviceRpcResultSp.getStatus() == RpcStatusEx.Failed) {
-                        LOG.error("Renderer implementation failed !");
-                        OperationResult deleteServicePathOperationResult =
-                                this.serviceDataStoreOperations.deleteServicePath(serviceName);
-                        if (!deleteServicePathOperationResult.isSuccess()) {
-                            LOG.warn("Service path was not removed from datastore!");
-                        }
-                        if (tempService) {
-                            OperationResult deleteServiceOperationResult =
-                                    this.serviceDataStoreOperations.deleteTempService(serviceName);
-                            if (!deleteServiceOperationResult.isSuccess()) {
-                                LOG.warn("Temp Service was not removed from datastore!");
-                            }
-                        } else {
-                            OperationResult deleteServiceOperationResult =
-                                    this.serviceDataStoreOperations.deleteService(serviceName);
-                            if (!deleteServiceOperationResult.isSuccess()) {
-                                LOG.warn("Service was not removed from datastore!");
-                            }
-                        }
-                    }
-                    break;
-                /* service-delete. */
-                case 4 :
-                    if (serviceRpcResultSp.getStatus() == RpcStatusEx.Successful) {
-                        LOG.info("Service '{}' deleted !", serviceName);
-                        if (this.input != null) {
-                            LOG.info("sending PCE cancel resource reserve for '{}'",  this.input.getServiceName());
-                            this.pceServiceWrapper.cancelPCEResource(this.input.getServiceName(),
-                                    ServiceNotificationTypes.ServiceDeleteResult);
-                        } else {
-                            LOG.error("ServiceInput parameter is null !");
-                        }
-                    } else if (serviceRpcResultSp.getStatus() == RpcStatusEx.Failed) {
-                        LOG.error("Renderer service delete failed !");
-                        return;
-                    }
-                    break;
-                default:
-                    break;
-            }
-        } else {
+    public void onRendererRpcResultSp(RendererRpcResultSp notification) {
+        if (compareServiceRpcResultSp(notification)) {
             LOG.warn("ServiceRpcResultSp already wired !");
+            return;
+        }
+        serviceRpcResultSp = notification;
+        String serviceName = serviceRpcResultSp.getServiceName();
+        int notifType = serviceRpcResultSp.getNotificationType().getIntValue();
+        LOG.info("Renderer '{}' Notification received : {}", serviceRpcResultSp.getNotificationType().getName(),
+                notification);
+        switch (notifType) {
+            /* service-implementation-request. */
+            case 3 :
+                onServiceImplementationResult(serviceName);
+                break;
+            /* service-delete. */
+            case 4 :
+                onServiceDeleteResult(serviceName);
+                break;
+            default:
+                break;
         }
     }
 
-    private Boolean compareServiceRpcResultSp(ServiceRpcResultSp notification) {
-        Boolean result = true;
-        if (serviceRpcResultSp == null) {
-            result = false;
+    /**
+     * Process service delete result for serviceName.
+     * @param serviceName String
+     */
+    private void onServiceDeleteResult(String serviceName) {
+        if (serviceRpcResultSp.getStatus() == RpcStatusEx.Failed) {
+            LOG.error("Renderer service delete failed !");
+            return;
+        } else if (serviceRpcResultSp.getStatus() == RpcStatusEx.Pending) {
+            LOG.warn("Renderer service delete returned a Penging RpcStatusEx code!");
+            return;
+        } else if (serviceRpcResultSp.getStatus() != RpcStatusEx.Successful) {
+            LOG.error("Renderer service delete returned an unknown RpcStatusEx code!");
+            return;
+        }
+        LOG.info("Service '{}' deleted !", serviceName);
+        if (this.input == null) {
+            LOG.error("ServiceInput parameter is null !");
+            return;
+        }
+        LOG.info("sending PCE cancel resource reserve for '{}'",  this.input.getServiceName());
+        this.pceServiceWrapper.cancelPCEResource(this.input.getServiceName(),
+                ServiceNotificationTypes.ServiceDeleteResult);
+    }
+
+    /**
+     * Process service implementation result for serviceName.
+     * @param serviceName String
+     * @param serviceName String
+     */
+    private void onServiceImplementationResult(String serviceName) {
+        if (serviceRpcResultSp.getStatus() == RpcStatusEx.Successful) {
+            onSuccededServiceImplementation();
+        } else if (serviceRpcResultSp.getStatus() == RpcStatusEx.Failed) {
+            onFailedServiceImplementation(serviceName);
+        } else if (serviceRpcResultSp.getStatus() == RpcStatusEx.Pending) {
+            LOG.warn("Service Implementation still pending according to RpcStatusEx");
         } else {
-            if (serviceRpcResultSp.getNotificationType() != notification.getNotificationType()) {
-                result = false;
+            LOG.warn("Service Implementation has an unknown RpcStatusEx code");
+        }
+
+    }
+
+    /**
+     * Process succeeded service implementation for service.
+     */
+    private void onSuccededServiceImplementation() {
+        LOG.info("Service implemented !");
+        if (serviceDataStoreOperations == null) {
+            LOG.debug("serviceDataStoreOperations is null");
+            return;
+        }
+        OperationResult operationResult = null;
+        if (tempService) {
+            operationResult = this.serviceDataStoreOperations.modifyTempService(
+                    serviceRpcResultSp.getServiceName(), State.InService, AdminStates.InService);
+            if (!operationResult.isSuccess()) {
+                LOG.warn("Temp Service status not updated in datastore !");
             }
-            if (serviceRpcResultSp.getServiceName() != notification.getServiceName()) {
-                result = false;
+        } else {
+            operationResult = this.serviceDataStoreOperations.modifyService(
+                    serviceRpcResultSp.getServiceName(),
+                    State.InService,
+                    AdminStates.InService);
+            if (!operationResult.isSuccess()) {
+                LOG.warn("Service status not updated in datastore !");
             }
-            if (serviceRpcResultSp.getStatus() != notification.getStatus()) {
-                result = false;
+        }
+    }
+
+    /**
+     * Process failed service implementation for serviceName.
+     * @param serviceName String
+     */
+    private void onFailedServiceImplementation(String serviceName) {
+        LOG.error("Renderer implementation failed !");
+        OperationResult deleteServicePathOperationResult =
+                this.serviceDataStoreOperations.deleteServicePath(serviceName);
+        if (!deleteServicePathOperationResult.isSuccess()) {
+            LOG.warn("Service path was not removed from datastore!");
+        }
+        if (tempService) {
+            OperationResult deleteServiceOperationResult =
+                    this.serviceDataStoreOperations.deleteTempService(serviceName);
+            if (!deleteServiceOperationResult.isSuccess()) {
+                LOG.warn("Temp Service was not removed from datastore!");
             }
-            if (serviceRpcResultSp.getStatusMessage() != notification.getStatusMessage()) {
-                result = false;
+        } else {
+            OperationResult deleteServiceOperationResult =
+                    this.serviceDataStoreOperations.deleteService(serviceName);
+            if (!deleteServiceOperationResult.isSuccess()) {
+                LOG.warn("Service was not removed from datastore!");
             }
         }
-        return result;
+    }
+
+    @SuppressFBWarnings(
+        value = "ES_COMPARING_STRINGS_WITH_EQ",
+        justification = "false positives, not strings but real object references comparisons")
+    private Boolean compareServiceRpcResultSp(RendererRpcResultSp notification) {
+        if (serviceRpcResultSp == null) {
+            return false;
+        }
+        if (serviceRpcResultSp.getNotificationType() != notification.getNotificationType()) {
+            return false;
+        }
+        if (serviceRpcResultSp.getServiceName() != notification.getServiceName()) {
+            return false;
+        }
+        if (serviceRpcResultSp.getStatus() != notification.getStatus()) {
+            return false;
+        }
+        if (serviceRpcResultSp.getStatusMessage() != notification.getStatusMessage()) {
+            return false;
+        }
+        return true;
     }
 
     public void setServiceInput(ServiceInput serviceInput) {