public class ServiceOperationsCacheServiceProviderimpl extends AbstractCacheServiceProvider
implements ServiceOperationsCacheServiceProvider {
+ private static final String EMPTY_STRING = "";
private static final Logger LOGGER = LoggerFactory.getLogger(ServiceOperationsCacheServiceProviderimpl.class);
@Autowired
public Output putServiceOperationInformation(final GenericResourceApiServiceOperationInformation input) {
final GenericResourceApiSdncrequestheaderSdncRequestHeader requestHeader = input.getSdncRequestHeader();
- final String svcRequestId = requestHeader != null ? requestHeader.getSvcRequestId() : null;
+ final String svcRequestId = getSvcRequestId(requestHeader);
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
final GenericResourceApiVnfinformationVnfInformation vnfInformation = input.getVnfInformation();
final GenericResourceApiSdncrequestheaderSdncRequestHeader requestHeader = input.getSdncRequestHeader();
- final String svcRequestId = requestHeader != null ? requestHeader.getSvcRequestId() : null;
+ final String svcRequestId = getSvcRequestId(requestHeader);
if (serviceInformation != null && isValid(serviceInformation.getServiceInstanceId()) && vnfInformation != null
&& isValid(vnfInformation.getVnfId())) {
final GenericResourceApiServicedataServiceData serviceData = service.getServiceData();
if (serviceData != null) {
final List<GenericResourceApiServicedataServicedataVnfsVnf> vnfsList = getVnfs(serviceData);
- if (ifVnfNotExists(vnfId, vnfsList)) {
+ final GenericResourceApiLastRpcActionEnumeration svcAction =
+ GenericResourceApiLastRpcActionEnumeration.fromValue(getSvcAction(requestHeader));
+ if (ifVnfNotExists(vnfId, svcAction, vnfsList)) {
vnfsList.add(getGenericResourceApiServicedataVnf(serviceInstanceId, vnfId, input));
final GenericResourceApiServicestatusServiceStatus serviceStatus = service.getServiceStatus();
.vnfResponseInformation(new GenericResourceApiInstanceReference().instanceId(vnfId)
.objectPath(getObjectPath(serviceInstanceId, vnfId)));
}
- LOGGER.error("vnfId: {} already exists", vnfId);
+ LOGGER.error("vnfId: {} already exists with SVC Action: {}", vnfId, svcAction);
return new Output().ackFinalIndicator(YES).responseCode(HttpStatus.BAD_REQUEST.toString())
.responseMessage("vnfId: " + vnfId + " already exists").svcRequestId(svcRequestId);
}
.responseMessage("Unable to add vnf").svcRequestId(svcRequestId);
}
+ @Override
+ public Output deleteVnfOperationInformation(final GenericResourceApiVnfOperationInformation input) {
+ final GenericResourceApiServiceinformationServiceInformation serviceInformation = input.getServiceInformation();
+ final GenericResourceApiVnfinformationVnfInformation vnfInformation = input.getVnfInformation();
+
+ final GenericResourceApiSdncrequestheaderSdncRequestHeader requestHeader = input.getSdncRequestHeader();
+ final String svcRequestId = getSvcRequestId(requestHeader);
+
+ if (serviceInformation != null && isValid(serviceInformation.getServiceInstanceId()) && vnfInformation != null
+ && isValid(vnfInformation.getVnfId())) {
+ final String serviceInstanceId = serviceInformation.getServiceInstanceId();
+ final String vnfId = vnfInformation.getVnfId();
+ final Optional<GenericResourceApiServicemodelinfrastructureService> optional =
+ getGenericResourceApiServicemodelinfrastructureService(serviceInstanceId);
+ if (optional.isPresent()) {
+ final GenericResourceApiServicemodelinfrastructureService service = optional.get();
+ final GenericResourceApiServicedataServiceData serviceData = service.getServiceData();
+ if (serviceData != null) {
+ final List<GenericResourceApiServicedataServicedataVnfsVnf> vnfsList = getVnfs(serviceData);
+ final Optional<GenericResourceApiServicedataServicedataVnfsVnf> vnfInstanceOptional =
+ getExistingVnf(vnfId, vnfsList);
+
+ if (vnfInstanceOptional.isPresent()) {
+ 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)
+ .serviceResponseInformation(
+ new GenericResourceApiInstanceReference().instanceId(serviceInstanceId))
+ .vnfResponseInformation(new GenericResourceApiInstanceReference().instanceId(vnfId));
+ }
+
+ }
+ }
+ LOGGER.error(
+ "Unable to find existing GenericResourceApiServiceModelInfrastructure in cache using service instance id: {}",
+ serviceInstanceId);
+
+ }
+ LOGGER.error("Unable to remove vnf instance from cache due to invalid input: {}... ", input);
+ return new Output().ackFinalIndicator(YES).responseCode(HttpStatus.BAD_REQUEST.toString())
+ .responseMessage("Unable to remove vnf").svcRequestId(svcRequestId);
+
+ }
+
+ private String getSvcRequestId(final GenericResourceApiSdncrequestheaderSdncRequestHeader requestHeader) {
+ return requestHeader != null ? requestHeader.getSvcRequestId() : null;
+ }
+
@Override
public void clearAll() {
clearCache(SERVICE_TOPOLOGY_OPERATION_CACHE);
}
- private boolean ifVnfNotExists(final String vnfId,
+ private boolean ifVnfNotExists(final String vnfId, final GenericResourceApiLastRpcActionEnumeration svcAction,
final List<GenericResourceApiServicedataServicedataVnfsVnf> vnfsList) {
- final Optional<GenericResourceApiServicedataServicedataVnfsVnf> optional =
- vnfsList.stream().filter(vnf -> vnf.getVnfId() != null && vnf.getVnfId().equals(vnfId)).findFirst();
- return !optional.isPresent();
+ final Optional<GenericResourceApiServicedataServicedataVnfsVnf> optional = getExistingVnf(vnfId, vnfsList);
+ if (optional.isPresent()) {
+ final GenericResourceApiServicedataServicedataVnfsVnf existingVnf = optional.get();
+ final GenericResourceApiServicedataServicedataVnfsVnfVnfData vnfData = existingVnf.getVnfData();
+
+ if (vnfData != null && vnfData.getVnfLevelOperStatus() != null
+ && vnfData.getVnfLevelOperStatus().getLastRpcAction() != null) {
+ final GenericResourceApiLastRpcActionEnumeration existingVnflastRpcAction =
+ vnfData.getVnfLevelOperStatus().getLastRpcAction();
+ if (existingVnflastRpcAction.equals(svcAction)) {
+ LOGGER.error("Found vnf with id: {} and LastRpcAction: {} same as SvcAction: {}", vnfId,
+ existingVnflastRpcAction, svcAction);
+ return false;
+ }
+ LOGGER.warn("Will remove and replace existing vnf with id: {} as SvcAction is changed from {} to {}",
+ vnfId, existingVnflastRpcAction, svcAction);
+ vnfsList.removeIf(vnf -> vnf.getVnfId() != null && vnf.getVnfId().equals(vnfId));
+
+ }
+ }
+
+ return true;
+ }
+
+ private Optional<GenericResourceApiServicedataServicedataVnfsVnf> getExistingVnf(final String vnfId,
+ final List<GenericResourceApiServicedataServicedataVnfsVnf> vnfsList) {
+ return vnfsList.stream().filter(vnf -> vnf.getVnfId() != null && vnf.getVnfId().equals(vnfId)).findFirst();
}
private List<GenericResourceApiServicedataServicedataVnfsVnf> getVnfs(
apiServicedataServiceData.serviceLevelOperStatus(getServiceLevelOperStatus(input));
final GenericResourceApiServicestatusServiceStatus serviceStatus =
- getServiceStatus(getSvcAction(input.getSdncRequestHeader()), getAction(input.getRequestInformation()),
- HttpStatus.OK.toString());
+ getServiceStatus(getSvcAction(input.getSdncRequestHeader()),
+ getRequestAction(input.getRequestInformation()), HttpStatus.OK.toString());
return new GenericResourceApiServicemodelinfrastructureService().serviceData(apiServicedataServiceData)
.serviceStatus(serviceStatus).serviceInstanceId(serviceInstanceId);
}
- private String getAction(final GenericResourceApiRequestinformationRequestInformation input) {
- return getString(input.getRequestAction(), "");
- }
-
private String getSvcAction(final GenericResourceApiSdncrequestheaderSdncRequestHeader input) {
return input != null ? getStringOrNull(input.getSvcAction()) : null;
}
return new GenericResourceApiServicestatusServiceStatus().finalIndicator(YES)
.rpcAction(GenericResourceApiRpcActionEnumeration.fromValue(rpcAction))
.rpcName(SERVICE_TOPOLOGY_OPERATION).responseTimestamp(LocalDateTime.now().toString())
- .responseCode(responseCode).requestStatus(SYNCCOMPLETE).responseMessage("").action(action);
+ .responseCode(responseCode).requestStatus(SYNCCOMPLETE).responseMessage(EMPTY_STRING).action(action);
}
private GenericResourceApiOperStatusData getServiceLevelOperStatus(
}
private String getRequestAction(final GenericResourceApiRequestinformationRequestInformation input) {
- return input != null ? getStringOrNull(input.getRequestAction()) : null;
+ return getRequestAction(input, EMPTY_STRING);
+ }
+
+ private String getRequestAction(final GenericResourceApiRequestinformationRequestInformation input,
+ final String defaultValue) {
+ return input != null ? getString(input.getRequestAction(), defaultValue) : defaultValue;
}
private GenericResourceApiServicetopologyServiceTopology getServiceTopology(
}
+ 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;
+
+ }
+
}