Populate serviceInstanceId from instanceMap on 30/112330/1
authorKuleshov, Elena <evn@att.com>
Tue, 8 Sep 2020 20:45:49 +0000 (16:45 -0400)
committerBenjamin, Max (mb388a) <mb388a@att.com>
Tue, 8 Sep 2020 20:45:49 +0000 (16:45 -0400)
Populate serviceInstanceId from instanceMap on validation error.
Use Optional for return value for serviceInstanceId assist methods.

Issue-ID: SO-3224
Signed-off-by: Benjamin, Max (mb388a) <mb388a@att.com>
Change-Id: I36a44ae42bb89d621dec5a2f85266458ea0e0766

mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/RequestHandlerUtils.java
mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/ServiceInstances.java
mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/RequestHandlerUtilsTest.java

index 87e5a2f..60e9c3b 100644 (file)
@@ -518,20 +518,16 @@ public class RequestHandlerUtils extends AbstractRestHandler {
     }
 
     protected String setServiceInstanceId(String requestScope, ServiceInstancesRequest sir) {
+        String serviceInstanceId = null;
         if (sir.getServiceInstanceId() != null) {
-            return sir.getServiceInstanceId();
-        } else if (requestScope.equalsIgnoreCase(ModelType.instanceGroup.toString())) {
-            RelatedInstanceList[] relatedInstances = sir.getRequestDetails().getRelatedInstanceList();
-            if (relatedInstances != null) {
-                for (RelatedInstanceList relatedInstanceList : relatedInstances) {
-                    RelatedInstance relatedInstance = relatedInstanceList.getRelatedInstance();
-                    if (relatedInstance.getModelInfo().getModelType() == ModelType.service) {
-                        return relatedInstance.getInstanceId();
-                    }
-                }
+            serviceInstanceId = sir.getServiceInstanceId();
+        } else {
+            Optional<String> serviceInstanceIdForInstance = getServiceInstanceIdForInstanceGroup(requestScope, sir);
+            if (serviceInstanceIdForInstance.isPresent()) {
+                serviceInstanceId = serviceInstanceIdForInstance.get();
             }
         }
-        return null;
+        return serviceInstanceId;
     }
 
     private String requestScopeFromUri(String requestUri) {
@@ -916,6 +912,30 @@ public class RequestHandlerUtils extends AbstractRestHandler {
         return null;
     }
 
+    protected Optional<String> getServiceInstanceIdForValidationError(ServiceInstancesRequest sir,
+            HashMap<String, String> instanceIdMap, String requestScope) {
+        if (instanceIdMap != null && !instanceIdMap.isEmpty() && instanceIdMap.get("serviceInstanceId") != null) {
+            return Optional.of(instanceIdMap.get("serviceInstanceId"));
+        } else {
+            return getServiceInstanceIdForInstanceGroup(requestScope, sir);
+        }
+    }
+
+    protected Optional<String> getServiceInstanceIdForInstanceGroup(String requestScope, ServiceInstancesRequest sir) {
+        if (requestScope.equalsIgnoreCase(ModelType.instanceGroup.toString())) {
+            RelatedInstanceList[] relatedInstances = sir.getRequestDetails().getRelatedInstanceList();
+            if (relatedInstances != null) {
+                for (RelatedInstanceList relatedInstanceList : relatedInstances) {
+                    RelatedInstance relatedInstance = relatedInstanceList.getRelatedInstance();
+                    if (relatedInstance.getModelInfo().getModelType() == ModelType.service) {
+                        return Optional.ofNullable(relatedInstance.getInstanceId());
+                    }
+                }
+            }
+        }
+        return Optional.empty();
+    }
+
     private RecipeLookupResult getDefaultVnfUri(ServiceInstancesRequest sir, Actions action) {
         String defaultSource = getDefaultModel(sir);
         VnfRecipe vnfRecipe = catalogDbClient.getFirstVnfRecipeByNfRoleAndAction(defaultSource, action.toString());
index 107aa57..2c8e926 100644 (file)
@@ -829,7 +829,8 @@ public class ServiceInstances extends AbstractRestHandler {
             requestValidatorListenerRunner.runValidations(requestUri, instanceIdMap, sir, queryParams, action);
         } catch (ApiException e) {
             msoRequest.createErrorRequestRecord(Status.FAILED, requestId, e.getMessage(), action, requestScope,
-                    requestJSON, sir.getServiceInstanceId());
+                    requestJSON, requestHandlerUtils
+                            .getServiceInstanceIdForValidationError(sir, instanceIdMap, requestScope).orElse(null));
             throw e;
         }
 
index 7f9ff98..2ba646f 100644 (file)
@@ -39,6 +39,7 @@ import java.net.MalformedURLException;
 import java.net.URL;
 import java.nio.file.Files;
 import java.nio.file.Paths;
+import java.util.HashMap;
 import java.util.List;
 import javax.ws.rs.core.MediaType;
 import org.apache.http.HttpStatus;
@@ -338,4 +339,34 @@ public class RequestHandlerUtilsTest extends BaseTest {
         assertEquals(expectedBasicAuth, basicAuth);
     }
 
+    @Test
+    public void getServiceInstanceIdForValidationErrorTest() {
+        ServiceInstancesRequest sir = new ServiceInstancesRequest();
+        String requestScope = "vnf";
+        HashMap<String, String> instanceIdMap = new HashMap<String, String>();
+        instanceIdMap.put("serviceInstanceId", "testServiceInstanceId");
+        String serviceInstanceId =
+                requestHandlerUtils.getServiceInstanceIdForValidationError(sir, instanceIdMap, requestScope).get();
+        assertEquals("testServiceInstanceId", serviceInstanceId);
+    }
+
+    @Test
+    public void getServiceInstanceIdForValidationErrorInstanceGroupTest() throws Exception {
+        ServiceInstancesRequest sir =
+                mapper.readValue(inputStream("/CreateInstanceGroup.json"), ServiceInstancesRequest.class);
+        String requestScope = "instanceGroup";
+        String serviceInstanceId =
+                requestHandlerUtils.getServiceInstanceIdForValidationError(sir, null, requestScope).get();
+        assertEquals("ddcbbf3d-f2c1-4ca0-8852-76a807285efc", serviceInstanceId);
+    }
+
+    @Test
+    public void getServiceInstanceIdForInstanceGroupTest() throws Exception {
+        ServiceInstancesRequest sir =
+                mapper.readValue(inputStream("/CreateInstanceGroup.json"), ServiceInstancesRequest.class);
+        String requestScope = "instanceGroup";
+        String serviceInstanceId = requestHandlerUtils.getServiceInstanceIdForInstanceGroup(requestScope, sir).get();
+        assertEquals("ddcbbf3d-f2c1-4ca0-8852-76a807285efc", serviceInstanceId);
+    }
+
 }