Fixing service delete in sdnc simulator
[integration/csit.git] / plans / so / integration-etsi-testing / so-simulators / sdnc-simulator / src / main / java / org / onap / so / sdncsimulator / providers / ServiceOperationsCacheServiceProviderimpl.java
index 616a56c..dae8b7f 100644 (file)
@@ -94,28 +94,65 @@ public class ServiceOperationsCacheServiceProviderimpl extends AbstractCacheServ
 
         final GenericResourceApiServiceinformationServiceInformation serviceInformation = input.getServiceInformation();
         if (serviceInformation != null && isValid(serviceInformation.getServiceInstanceId())) {
-            final Cache cache = getCache(SERVICE_TOPOLOGY_OPERATION_CACHE);
             final String serviceInstanceId = serviceInformation.getServiceInstanceId();
-            LOGGER.info("Adding GenericResourceApiServiceOperationInformation to cache with key: {}",
-                    serviceInstanceId);
 
-            final GenericResourceApiServicemodelinfrastructureService service =
-                    getServiceItem(input, serviceInstanceId);
-            cache.put(serviceInstanceId, service);
+            if (isServiceOperationInformationNotExists(serviceInstanceId, input)) {
+                final Cache cache = getCache(SERVICE_TOPOLOGY_OPERATION_CACHE);
+                LOGGER.info("Adding GenericResourceApiServiceOperationInformation to cache with key: {}",
+                        serviceInstanceId);
 
-            final GenericResourceApiServicestatusServiceStatus serviceStatus = service.getServiceStatus();
+                final GenericResourceApiServicemodelinfrastructureService service =
+                        getServiceItem(input, serviceInstanceId);
+                cache.put(serviceInstanceId, service);
 
-            return new Output().ackFinalIndicator(serviceStatus.getFinalIndicator())
-                    .responseCode(serviceStatus.getResponseCode()).responseMessage(serviceStatus.getResponseMessage())
-                    .svcRequestId(svcRequestId).serviceResponseInformation(new GenericResourceApiInstanceReference()
-                            .instanceId(serviceInstanceId).objectPath(getObjectPath(serviceInstanceId)));
+                final GenericResourceApiServicestatusServiceStatus serviceStatus = service.getServiceStatus();
 
+                return new Output().ackFinalIndicator(serviceStatus.getFinalIndicator())
+                        .responseCode(serviceStatus.getResponseCode())
+                        .responseMessage(serviceStatus.getResponseMessage()).svcRequestId(svcRequestId)
+                        .serviceResponseInformation(new GenericResourceApiInstanceReference()
+                                .instanceId(serviceInstanceId).objectPath(getObjectPath(serviceInstanceId)));
+            }
+            LOGGER.error("serviceInstanceId: {} already exists", serviceInstanceId);
+            return new Output().ackFinalIndicator(YES).responseCode(HttpStatus.BAD_REQUEST.toString())
+                    .responseMessage("serviceInstanceId: " + serviceInstanceId + " already exists")
+                    .svcRequestId(svcRequestId);
         }
+
         LOGGER.error(
                 "Unable to add GenericResourceApiServiceOperationInformation in cache due to invalid input: {}... ",
                 input);
         return new Output().ackFinalIndicator(YES).responseCode(HttpStatus.BAD_REQUEST.toString())
                 .responseMessage("Service instance not found").svcRequestId(svcRequestId);
+
+    }
+
+    @Override
+    public Output deleteServiceOperationInformation(final GenericResourceApiServiceOperationInformation input) {
+        final GenericResourceApiServiceinformationServiceInformation serviceInformation = input.getServiceInformation();
+        final String svcRequestId = getSvcRequestId(input.getSdncRequestHeader());
+
+        if (serviceInformation != null && isValid(serviceInformation.getServiceInstanceId())) {
+            final String serviceInstanceId = serviceInformation.getServiceInstanceId();
+            final Optional<GenericResourceApiServicemodelinfrastructureService> optional =
+                    getGenericResourceApiServicemodelinfrastructureService(serviceInstanceId);
+            if (optional.isPresent()) {
+                final Cache cache = getCache(SERVICE_TOPOLOGY_OPERATION_CACHE);
+                LOGGER.info("Deleting GenericResourceApiServiceOperationInformation from cache using key: {}",
+                        serviceInstanceId);
+                cache.evict(serviceInstanceId);
+                return new Output().ackFinalIndicator(YES).responseCode(HttpStatus.OK.toString())
+                        .responseMessage(EMPTY_STRING).svcRequestId(svcRequestId).serviceResponseInformation(
+                                new GenericResourceApiInstanceReference().instanceId(serviceInstanceId));
+            }
+            LOGGER.error(
+                    "Unable to find existing GenericResourceApiServiceModelInfrastructure in cache using service instance id: {}",
+                    serviceInstanceId);
+
+        }
+        LOGGER.error("Unable to remove service instance from cache due to invalid input: {}... ", input);
+        return new Output().ackFinalIndicator(YES).responseCode(HttpStatus.BAD_REQUEST.toString())
+                .responseMessage("Unable to remove service").svcRequestId(svcRequestId);
     }
 
     @Override
@@ -210,7 +247,14 @@ public class ServiceOperationsCacheServiceProviderimpl extends AbstractCacheServ
                             getExistingVnf(vnfId, vnfsList);
 
                     if (vnfInstanceOptional.isPresent()) {
-                        vnfsList.removeIf(vnf -> vnf.getVnfId() != null && vnf.getVnfId().equals(vnfId));
+                        vnfsList.removeIf(vnf -> {
+                            final String existingVnfId = vnf.getVnfId();
+                            if (existingVnfId != null && existingVnfId.equals(vnfId)) {
+                                LOGGER.info("Remove vnf with id: {} ... ", existingVnfId);
+                                return true;
+                            }
+                            return false;
+                        });
 
                         return new Output().ackFinalIndicator(YES).responseCode(HttpStatus.OK.toString())
                                 .responseMessage(EMPTY_STRING).svcRequestId(svcRequestId)
@@ -432,4 +476,33 @@ public class ServiceOperationsCacheServiceProviderimpl extends AbstractCacheServ
 
     }
 
+    private boolean isServiceOperationInformationNotExists(final String serviceInstanceId,
+            final GenericResourceApiServiceOperationInformation input) {
+        final GenericResourceApiSdncrequestheaderSdncRequestHeader requestHeader = input.getSdncRequestHeader();
+        final Optional<GenericResourceApiServicemodelinfrastructureService> optional =
+                getGenericResourceApiServicemodelinfrastructureService(serviceInstanceId);
+
+        if (optional.isPresent()) {
+            final GenericResourceApiServicemodelinfrastructureService existingService = optional.get();
+            final GenericResourceApiServicestatusServiceStatus serviceStatus = existingService.getServiceStatus();
+            if (serviceStatus != null) {
+                final GenericResourceApiRpcActionEnumeration rpcAction = serviceStatus.getRpcAction();
+                final String svcAction = getSvcAction(requestHeader);
+                if (rpcAction != null && rpcAction.toString().equals(svcAction)) {
+                    LOGGER.error("Found Service with id: {} and RpcAction: {} same as SvcAction:  {}",
+                            serviceInstanceId, rpcAction, svcAction);
+                    return false;
+                }
+
+                final Cache cache = getCache(SERVICE_TOPOLOGY_OPERATION_CACHE);
+                LOGGER.info(
+                        "Deleting existing GenericResourceApiServiceOperationInformation from cache using key: {} as SvcAction is changed from {} to {}",
+                        serviceInstanceId, rpcAction, svcAction);
+                cache.evict(serviceInstanceId);
+            }
+        }
+        return true;
+
+    }
+
 }