[SO] Create changes for SO-API and BPMN-INFRA to support CNF's through ASD
[so.git] / bpmn / so-bpmn-tasks / src / main / java / org / onap / so / bpmn / infrastructure / adapter / vnfm / tasks / VnfmAdapterServiceProviderImpl.java
index afdcccf..94213bb 100644 (file)
 
 package org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks;
 
+import static org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.VnfmAdapterCreateVnfTaskConfiguration.VNFM_HTTP_REST_SERVICE_PROVIDER_BEAN;
+import org.onap.so.adapters.etsisol003adapter.lcm.v1.model.CreateVnfRequest;
+import org.onap.so.adapters.etsisol003adapter.lcm.v1.model.CreateVnfResponse;
+import org.onap.so.adapters.etsisol003adapter.lcm.v1.model.DeleteVnfResponse;
+import org.onap.so.adapters.etsisol003adapter.lcm.v1.model.QueryJobResponse;
+import org.onap.so.rest.exceptions.HttpResouceNotFoundException;
 import org.onap.so.rest.exceptions.InvalidRestRequestException;
 import org.onap.so.rest.exceptions.RestProcessingException;
 import org.onap.so.rest.service.HttpRestServiceProvider;
-import org.onap.vnfmadapter.v1.model.CreateVnfRequest;
-import org.onap.vnfmadapter.v1.model.CreateVnfResponse;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
-
 import com.google.common.base.Optional;
 
 /**
@@ -41,13 +45,14 @@ import com.google.common.base.Optional;
 public class VnfmAdapterServiceProviderImpl implements VnfmAdapterServiceProvider {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(VnfmAdapterServiceProviderImpl.class);
+    public static final String RECEIVED_RESPONSE_WITHOUT_BODY = "Received response without body: {}";
 
     private final VnfmAdapterUrlProvider urlProvider;
     private final HttpRestServiceProvider httpServiceProvider;
 
     @Autowired
     public VnfmAdapterServiceProviderImpl(final VnfmAdapterUrlProvider urlProvider,
-            final HttpRestServiceProvider httpServiceProvider) {
+            @Qualifier(VNFM_HTTP_REST_SERVICE_PROVIDER_BEAN) final HttpRestServiceProvider httpServiceProvider) {
         this.urlProvider = urlProvider;
         this.httpServiceProvider = httpServiceProvider;
     }
@@ -68,7 +73,7 @@ public class VnfmAdapterServiceProviderImpl implements VnfmAdapterServiceProvide
             }
 
             if (!response.hasBody()) {
-                LOGGER.error("Received response without body: {}", response);
+                LOGGER.error(RECEIVED_RESPONSE_WITHOUT_BODY, response);
                 return Optional.absent();
             }
 
@@ -80,10 +85,73 @@ public class VnfmAdapterServiceProviderImpl implements VnfmAdapterServiceProvide
             }
 
             return Optional.of(createVnfResponse);
-        } catch (final RestProcessingException | InvalidRestRequestException httpInvocationException) {
+        } catch (final RestProcessingException | InvalidRestRequestException
+                | HttpResouceNotFoundException httpInvocationException) {
             LOGGER.error("Unexpected error while processing create and instantiation request", httpInvocationException);
             return Optional.absent();
         }
 
     }
+
+    @Override
+    public Optional<DeleteVnfResponse> invokeDeleteRequest(final String vnfId) {
+        try {
+            final String url = urlProvider.getDeleteUrl(vnfId);
+            LOGGER.debug("Will send request to vnfm adapter using url: {}", url);
+
+            final ResponseEntity<DeleteVnfResponse> response =
+                    httpServiceProvider.deleteHttpRequest(url, DeleteVnfResponse.class);
+
+            LOGGER.debug("Response received: ", response);
+
+            final HttpStatus httpStatus = response.getStatusCode();
+
+            if (!(httpStatus.equals(HttpStatus.ACCEPTED)) && !(httpStatus.equals(HttpStatus.OK))) {
+                LOGGER.error("Unable to invoke HTTP DELETE using URL: {}, Response Code: {}", url, httpStatus.value());
+                return Optional.absent();
+            }
+
+            if (!response.hasBody()) {
+                LOGGER.error(RECEIVED_RESPONSE_WITHOUT_BODY, response);
+                return Optional.absent();
+            }
+            final DeleteVnfResponse deleteVnfResponse = response.getBody();
+
+            if (deleteVnfResponse.getJobId() == null || deleteVnfResponse.getJobId().isEmpty()) {
+                LOGGER.error("Received invalid delete response: {}", response);
+                return Optional.absent();
+            }
+            return Optional.of(deleteVnfResponse);
+        } catch (final RestProcessingException | InvalidRestRequestException httpInvocationException) {
+            LOGGER.error("Unexpected error while processing delete request", httpInvocationException);
+            return Optional.absent();
+        }
+    }
+
+    @Override
+    public Optional<QueryJobResponse> getInstantiateOperationJobStatus(final String jobId) {
+        try {
+            final String url = urlProvider.getJobStatusUrl(jobId);
+
+            final ResponseEntity<QueryJobResponse> response =
+                    httpServiceProvider.getHttpResponse(url, QueryJobResponse.class);
+
+            final HttpStatus httpStatus = response.getStatusCode();
+
+            if (!(httpStatus.equals(HttpStatus.ACCEPTED)) && !(httpStatus.equals(HttpStatus.OK))) {
+                LOGGER.error("Unable to invoke HTTP GET using URL: {}, Response Code: ", url, httpStatus.value());
+                return Optional.absent();
+            }
+
+            if (!response.hasBody()) {
+                LOGGER.error(RECEIVED_RESPONSE_WITHOUT_BODY, response);
+                return Optional.absent();
+            }
+            return Optional.of(response.getBody());
+        } catch (final RestProcessingException | InvalidRestRequestException
+                | HttpResouceNotFoundException httpInvocationException) {
+            LOGGER.error("Unexpected error while processing job request", httpInvocationException);
+            throw httpInvocationException;
+        }
+    }
 }