2  * ============LICENSE_START=======================================================
 
   4  * ================================================================================
 
   5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 
   6  * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
 
   7  * ================================================================================
 
   8  * Modifications Copyright (c) 2019 Samsung
 
   9  * ================================================================================
 
  10  * Licensed under the Apache License, Version 2.0 (the "License");
 
  11  * you may not use this file except in compliance with the License.
 
  12  * You may obtain a copy of the License at
 
  14  *      http://www.apache.org/licenses/LICENSE-2.0
 
  16  * Unless required by applicable law or agreed to in writing, software
 
  17  * distributed under the License is distributed on an "AS IS" BASIS,
 
  18  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  19  * See the License for the specific language governing permissions and
 
  20  * limitations under the License.
 
  21  * ============LICENSE_END=========================================================
 
  24 package org.onap.so.apihandlerinfra;
 
  26 import java.io.IOException;
 
  27 import java.util.HashMap;
 
  28 import java.util.Optional;
 
  29 import javax.transaction.Transactional;
 
  30 import javax.ws.rs.Consumes;
 
  31 import javax.ws.rs.DELETE;
 
  32 import javax.ws.rs.POST;
 
  33 import javax.ws.rs.PUT;
 
  34 import javax.ws.rs.Path;
 
  35 import javax.ws.rs.PathParam;
 
  36 import javax.ws.rs.Produces;
 
  37 import javax.ws.rs.container.ContainerRequestContext;
 
  38 import javax.ws.rs.core.Context;
 
  39 import javax.ws.rs.core.MediaType;
 
  40 import javax.ws.rs.core.Response;
 
  41 import org.apache.commons.lang.StringUtils;
 
  42 import org.apache.http.HttpStatus;
 
  43 import org.onap.so.apihandler.common.CommonConstants;
 
  44 import org.onap.so.apihandler.common.ErrorNumbers;
 
  45 import org.onap.so.apihandler.common.RequestClientParameter;
 
  46 import org.onap.so.apihandlerinfra.exceptions.ApiException;
 
  47 import org.onap.so.apihandlerinfra.exceptions.RequestDbFailureException;
 
  48 import org.onap.so.apihandlerinfra.exceptions.ValidateException;
 
  49 import org.onap.so.apihandlerinfra.infra.rest.BpmnRequestBuilder;
 
  50 import org.onap.so.apihandlerinfra.infra.rest.exception.CloudConfigurationNotFoundException;
 
  51 import org.onap.so.apihandlerinfra.infra.rest.handler.AbstractRestHandler;
 
  52 import org.onap.so.apihandlerinfra.infra.rest.validators.RequestValidatorListenerRunner;
 
  53 import org.onap.so.apihandlerinfra.logging.ErrorLoggerInfo;
 
  54 import org.onap.so.constants.Status;
 
  55 import org.onap.so.db.catalog.client.CatalogDbClient;
 
  56 import org.onap.so.db.request.beans.InfraActiveRequests;
 
  57 import org.onap.so.db.request.client.RequestsDbClient;
 
  58 import org.onap.so.exceptions.ValidationException;
 
  59 import org.onap.logging.filter.base.ErrorCode;
 
  60 import org.onap.so.logger.MessageEnum;
 
  61 import org.onap.so.serviceinstancebeans.CloudConfiguration;
 
  62 import org.onap.so.serviceinstancebeans.ModelInfo;
 
  63 import org.onap.so.serviceinstancebeans.ModelType;
 
  64 import org.onap.so.serviceinstancebeans.RequestDetails;
 
  65 import org.onap.so.serviceinstancebeans.RequestReferences;
 
  66 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
 
  67 import org.onap.so.serviceinstancebeans.ServiceInstancesResponse;
 
  68 import org.slf4j.Logger;
 
  69 import org.slf4j.LoggerFactory;
 
  70 import org.springframework.beans.factory.annotation.Autowired;
 
  71 import org.springframework.core.env.Environment;
 
  72 import org.springframework.stereotype.Component;
 
  73 import org.springframework.web.client.RestTemplate;
 
  74 import io.swagger.v3.oas.annotations.OpenAPIDefinition;
 
  75 import io.swagger.v3.oas.annotations.Operation;
 
  76 import io.swagger.v3.oas.annotations.info.Info;
 
  77 import io.swagger.v3.oas.annotations.media.ArraySchema;
 
  78 import io.swagger.v3.oas.annotations.media.Content;
 
  79 import io.swagger.v3.oas.annotations.media.Schema;
 
  80 import io.swagger.v3.oas.annotations.responses.ApiResponse;
 
  83 @Path("/onap/so/infra/serviceInstantiation")
 
  84 @OpenAPIDefinition(info = @Info(title = "/onap/so/infra/serviceInstantiation",
 
  85         description = "Infrastructure API Requests for Service Instances"))
 
  86 public class ServiceInstances extends AbstractRestHandler {
 
  88     private static Logger logger = LoggerFactory.getLogger(MsoRequest.class);
 
  89     private static String uriPrefix = "/serviceInstantiation/";
 
  90     private static final String SAVE_TO_DB = "save instance to db";
 
  93     private Environment env;
 
  96     private RestTemplate restTemplate;
 
  99     private CatalogDbClient catalogDbClient;
 
 102     private RequestsDbClient infraActiveRequestsClient;
 
 105     private MsoRequest msoRequest;
 
 108     private RequestHandlerUtils requestHandlerUtils;
 
 111     private RequestValidatorListenerRunner requestValidatorListenerRunner;
 
 114     private BpmnRequestBuilder bpmnRequestBuilder;
 
 117     @Path("/{version:[vV][5-7]}/serviceInstances")
 
 118     @Consumes(MediaType.APPLICATION_JSON)
 
 119     @Produces(MediaType.APPLICATION_JSON)
 
 120     @Operation(description = "Create a Service Instance on a version provided", responses = @ApiResponse(
 
 121             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 123     public Response createServiceInstance(String request, @PathParam("version") String version,
 
 124             @Context ContainerRequestContext requestContext) throws ApiException {
 
 125         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 126         return serviceInstances(request, Action.createInstance, null, version, requestId,
 
 127                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 131     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/activate")
 
 132     @Consumes(MediaType.APPLICATION_JSON)
 
 133     @Produces(MediaType.APPLICATION_JSON)
 
 134     @Operation(description = "Activate provided Service Instance", responses = @ApiResponse(
 
 135             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 137     public Response activateServiceInstance(String request, @PathParam("version") String version,
 
 138             @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
 
 139             throws ApiException {
 
 140         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 141         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 142         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 143         return serviceInstances(request, Action.activateInstance, instanceIdMap, version, requestId,
 
 144                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 148     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/deactivate")
 
 149     @Consumes(MediaType.APPLICATION_JSON)
 
 150     @Produces(MediaType.APPLICATION_JSON)
 
 151     @Operation(description = "Deactivate provided Service Instance", responses = @ApiResponse(
 
 152             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 154     public Response deactivateServiceInstance(String request, @PathParam("version") String version,
 
 155             @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
 
 156             throws ApiException {
 
 157         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 158         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 159         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 160         return serviceInstances(request, Action.deactivateInstance, instanceIdMap, version, requestId,
 
 161                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 165     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}")
 
 166     @Consumes(MediaType.APPLICATION_JSON)
 
 167     @Produces(MediaType.APPLICATION_JSON)
 
 168     @Operation(description = "Delete provided Service Instance", responses = @ApiResponse(
 
 169             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 171     public Response deleteServiceInstance(String request, @PathParam("version") String version,
 
 172             @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
 
 173             throws ApiException {
 
 174         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 175         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 176         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 177         return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
 
 178                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 182     @Path("/{version:[vV][7]}/serviceInstances/assign")
 
 183     @Consumes(MediaType.APPLICATION_JSON)
 
 184     @Produces(MediaType.APPLICATION_JSON)
 
 185     @Operation(description = "Assign Service Instance", responses = @ApiResponse(
 
 186             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 188     public Response assignServiceInstance(String request, @PathParam("version") String version,
 
 189             @Context ContainerRequestContext requestContext) throws ApiException {
 
 190         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 191         return serviceInstances(request, Action.assignInstance, null, version, requestId,
 
 192                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 196     @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/unassign")
 
 197     @Consumes(MediaType.APPLICATION_JSON)
 
 198     @Produces(MediaType.APPLICATION_JSON)
 
 199     @Operation(description = "Unassign Service Instance", responses = @ApiResponse(
 
 200             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 202     public Response unassignServiceInstance(String request, @PathParam("version") String version,
 
 203             @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
 
 204             throws ApiException {
 
 205         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 206         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 207         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 208         return serviceInstances(request, Action.unassignInstance, instanceIdMap, version, requestId,
 
 209                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 213     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations")
 
 214     @Consumes(MediaType.APPLICATION_JSON)
 
 215     @Produces(MediaType.APPLICATION_JSON)
 
 216     @Operation(description = "Create Port Mirroring Configuration", responses = @ApiResponse(
 
 217             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 219     public Response createPortConfiguration(String request, @PathParam("version") String version,
 
 220             @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
 
 221             throws ApiException {
 
 222         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 223         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 224         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 225         return configurationRecipeLookup(request, Action.createInstance, instanceIdMap, version, requestId,
 
 226                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 230     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}")
 
 231     @Consumes(MediaType.APPLICATION_JSON)
 
 232     @Produces(MediaType.APPLICATION_JSON)
 
 233     @Operation(description = "Delete provided Port", responses = @ApiResponse(
 
 234             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 236     public Response deletePortConfiguration(String request, @PathParam("version") String version,
 
 237             @PathParam("serviceInstanceId") String serviceInstanceId,
 
 238             @PathParam("configurationInstanceId") String configurationInstanceId,
 
 239             @Context ContainerRequestContext requestContext) throws ApiException {
 
 240         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 241         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 242         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 243         instanceIdMap.put("configurationInstanceId", configurationInstanceId);
 
 244         return configurationRecipeLookup(request, Action.deleteInstance, instanceIdMap, version, requestId,
 
 245                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 249     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/enablePort")
 
 250     @Consumes(MediaType.APPLICATION_JSON)
 
 251     @Produces(MediaType.APPLICATION_JSON)
 
 252     @Operation(description = "Enable Port Mirroring", responses = @ApiResponse(
 
 253             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 255     public Response enablePort(String request, @PathParam("version") String version,
 
 256             @PathParam("serviceInstanceId") String serviceInstanceId,
 
 257             @PathParam("configurationInstanceId") String configurationInstanceId,
 
 258             @Context ContainerRequestContext requestContext) throws ApiException {
 
 259         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 260         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 261         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 262         instanceIdMap.put("configurationInstanceId", configurationInstanceId);
 
 263         return configurationRecipeLookup(request, Action.enablePort, instanceIdMap, version, requestId,
 
 264                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 268     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/disablePort")
 
 269     @Consumes(MediaType.APPLICATION_JSON)
 
 270     @Produces(MediaType.APPLICATION_JSON)
 
 271     @Operation(description = "Disable Port Mirroring", responses = @ApiResponse(
 
 272             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 274     public Response disablePort(String request, @PathParam("version") String version,
 
 275             @PathParam("serviceInstanceId") String serviceInstanceId,
 
 276             @PathParam("configurationInstanceId") String configurationInstanceId,
 
 277             @Context ContainerRequestContext requestContext) throws ApiException {
 
 278         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 279         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 280         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 281         instanceIdMap.put("configurationInstanceId", configurationInstanceId);
 
 282         return configurationRecipeLookup(request, Action.disablePort, instanceIdMap, version, requestId,
 
 283                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 287     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/activate")
 
 288     @Consumes(MediaType.APPLICATION_JSON)
 
 289     @Produces(MediaType.APPLICATION_JSON)
 
 290     @Operation(description = "Activate Port Mirroring", responses = @ApiResponse(
 
 291             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 293     public Response activatePort(String request, @PathParam("version") String version,
 
 294             @PathParam("serviceInstanceId") String serviceInstanceId,
 
 295             @PathParam("configurationInstanceId") String configurationInstanceId,
 
 296             @Context ContainerRequestContext requestContext) throws ApiException {
 
 297         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 298         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 299         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 300         instanceIdMap.put("configurationInstanceId", configurationInstanceId);
 
 301         return configurationRecipeLookup(request, Action.activateInstance, instanceIdMap, version, requestId,
 
 302                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 306     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/deactivate")
 
 307     @Consumes(MediaType.APPLICATION_JSON)
 
 308     @Produces(MediaType.APPLICATION_JSON)
 
 309     @Operation(description = "Deactivate Port Mirroring", responses = @ApiResponse(
 
 310             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 312     public Response deactivatePort(String request, @PathParam("version") String version,
 
 313             @PathParam("serviceInstanceId") String serviceInstanceId,
 
 314             @PathParam("configurationInstanceId") String configurationInstanceId,
 
 315             @Context ContainerRequestContext requestContext) throws ApiException {
 
 316         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 317         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 318         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 319         instanceIdMap.put("configurationInstanceId", configurationInstanceId);
 
 320         return configurationRecipeLookup(request, Action.deactivateInstance, instanceIdMap, version, requestId,
 
 321                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 325     @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/addRelationships")
 
 326     @Consumes(MediaType.APPLICATION_JSON)
 
 327     @Produces(MediaType.APPLICATION_JSON)
 
 328     @Operation(description = "Add Relationships to a Service Instance", responses = @ApiResponse(
 
 329             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 331     public Response addRelationships(String request, @PathParam("version") String version,
 
 332             @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
 
 333             throws ApiException {
 
 334         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 335         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 336         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 337         return configurationRecipeLookup(request, Action.addRelationships, instanceIdMap, version, requestId,
 
 338                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 342     @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/removeRelationships")
 
 343     @Consumes(MediaType.APPLICATION_JSON)
 
 344     @Produces(MediaType.APPLICATION_JSON)
 
 345     @Operation(description = "Remove Relationships from Service Instance", responses = @ApiResponse(
 
 346             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 348     public Response removeRelationships(String request, @PathParam("version") String version,
 
 349             @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
 
 350             throws ApiException {
 
 351         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 352         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 353         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 354         return configurationRecipeLookup(request, Action.removeRelationships, instanceIdMap, version, requestId,
 
 355                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 359     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs")
 
 360     @Consumes(MediaType.APPLICATION_JSON)
 
 361     @Produces(MediaType.APPLICATION_JSON)
 
 362     @Operation(description = "Create VNF on a specified version and serviceInstance", responses = @ApiResponse(
 
 363             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 365     public Response createVnfInstance(String request, @PathParam("version") String version,
 
 366             @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
 
 367             throws ApiException {
 
 368         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 369         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 370         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 372             return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
 
 373                     requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 374         } catch (Exception e) {
 
 375             logger.error("Error in vnf", e);
 
 381     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/replace")
 
 382     @Consumes(MediaType.APPLICATION_JSON)
 
 383     @Produces(MediaType.APPLICATION_JSON)
 
 384     @Operation(description = "Replace provided VNF instance", responses = @ApiResponse(
 
 385             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 387     public Response replaceVnfInstance(String request, @PathParam("version") String version,
 
 388             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
 
 389             @Context ContainerRequestContext requestContext) throws ApiException {
 
 390         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 391         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 392         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 393         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
 
 394         return serviceInstances(request, Action.replaceInstance, instanceIdMap, version, requestId,
 
 395                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 399     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}")
 
 400     @Consumes(MediaType.APPLICATION_JSON)
 
 401     @Produces(MediaType.APPLICATION_JSON)
 
 402     @Operation(description = "Update VNF on a specified version, serviceInstance and vnfInstance",
 
 403             responses = @ApiResponse(
 
 404                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 406     public Response updateVnfInstance(String request, @PathParam("version") String version,
 
 407             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
 
 408             @Context ContainerRequestContext requestContext) throws ApiException {
 
 409         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 410         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 411         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 412         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
 
 413         return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
 
 414                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 418     @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/applyUpdatedConfig")
 
 419     @Consumes(MediaType.APPLICATION_JSON)
 
 420     @Produces(MediaType.APPLICATION_JSON)
 
 421     @Operation(description = "Apply updated configuration", responses = @ApiResponse(
 
 422             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 423     public Response applyUpdatedConfig(String request, @PathParam("version") String version,
 
 424             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
 
 425             @Context ContainerRequestContext requestContext) throws ApiException {
 
 426         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 427         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 428         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 429         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
 
 430         return serviceInstances(request, Action.applyUpdatedConfig, instanceIdMap, version, requestId,
 
 431                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 435     @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/recreate")
 
 436     @Consumes(MediaType.APPLICATION_JSON)
 
 437     @Produces(MediaType.APPLICATION_JSON)
 
 438     @Operation(description = "Recreate VNF Instance", responses = @ApiResponse(
 
 439             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 440     public Response recreateVnfInstance(String request, @PathParam("version") String version,
 
 441             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
 
 442             @Context ContainerRequestContext requestContext) throws ApiException {
 
 443         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 444         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 445         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 446         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
 
 447         return serviceInstances(request, Action.recreateInstance, instanceIdMap, version, requestId,
 
 448                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 452     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}")
 
 453     @Consumes(MediaType.APPLICATION_JSON)
 
 454     @Produces(MediaType.APPLICATION_JSON)
 
 455     @Operation(description = "Delete provided VNF instance", responses = @ApiResponse(
 
 456             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 458     public Response deleteVnfInstance(String request, @PathParam("version") String version,
 
 459             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
 
 460             @Context ContainerRequestContext requestContext) throws ApiException {
 
 461         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 462         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 463         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 464         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
 
 465         return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
 
 466                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 470     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules")
 
 471     @Consumes(MediaType.APPLICATION_JSON)
 
 472     @Produces(MediaType.APPLICATION_JSON)
 
 473     @Operation(description = "Create VfModule on a specified version, serviceInstance and vnfInstance",
 
 474             responses = @ApiResponse(
 
 475                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 477     public Response createVfModuleInstance(String request, @PathParam("version") String version,
 
 478             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
 
 479             @Context ContainerRequestContext requestContext) throws ApiException {
 
 480         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 481         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 482         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 483         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
 
 484         return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
 
 485                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 489     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/replace")
 
 490     @Consumes(MediaType.APPLICATION_JSON)
 
 491     @Produces(MediaType.APPLICATION_JSON)
 
 492     @Operation(description = "Create VfModule on a specified version, serviceInstance and vnfInstance",
 
 493             responses = @ApiResponse(
 
 494                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 496     public Response replaceVfModuleInstance(String request, @PathParam("version") String version,
 
 497             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
 
 498             @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
 
 499             throws ApiException {
 
 500         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 501         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 502         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 503         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
 
 504         instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
 
 505         return serviceInstances(request, Action.replaceInstance, instanceIdMap, version, requestId,
 
 506                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 510     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}")
 
 511     @Consumes(MediaType.APPLICATION_JSON)
 
 512     @Produces(MediaType.APPLICATION_JSON)
 
 513     @Operation(description = "Update VfModule on a specified version, serviceInstance, vnfInstance and vfModule",
 
 514             responses = @ApiResponse(
 
 515                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 517     public Response updateVfModuleInstance(String request, @PathParam("version") String version,
 
 518             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
 
 519             @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
 
 520             throws ApiException {
 
 521         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 522         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 523         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 524         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
 
 525         instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
 
 526         return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
 
 527                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 531     @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/inPlaceSoftwareUpdate")
 
 532     @Consumes(MediaType.APPLICATION_JSON)
 
 533     @Produces(MediaType.APPLICATION_JSON)
 
 534     @Operation(description = "Perform VNF software update", responses = @ApiResponse(
 
 535             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 537     public Response inPlaceSoftwareUpdate(String request, @PathParam("version") String version,
 
 538             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
 
 539             @Context ContainerRequestContext requestContext) throws ApiException {
 
 540         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 541         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 542         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 543         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
 
 544         return serviceInstances(request, Action.inPlaceSoftwareUpdate, instanceIdMap, version, requestId,
 
 545                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 549     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}")
 
 550     @Consumes(MediaType.APPLICATION_JSON)
 
 551     @Produces(MediaType.APPLICATION_JSON)
 
 552     @Operation(description = "Delete provided VfModule instance", responses = @ApiResponse(
 
 553             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 555     public Response deleteVfModuleInstance(String request, @PathParam("version") String version,
 
 556             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
 
 557             @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
 
 558             throws ApiException {
 
 559         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 560         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 561         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 562         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
 
 563         instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
 
 564         return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
 
 565                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 569     @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/deactivateAndCloudDelete")
 
 570     @Consumes(MediaType.APPLICATION_JSON)
 
 571     @Produces(MediaType.APPLICATION_JSON)
 
 572     @Operation(description = "Deactivate and Cloud Delete VfModule instance", responses = @ApiResponse(
 
 573             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 575     public Response deactivateAndCloudDeleteVfModuleInstance(String request, @PathParam("version") String version,
 
 576             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
 
 577             @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
 
 578             throws ApiException {
 
 579         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 580         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 581         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 582         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
 
 583         instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
 
 584         Response response = serviceInstances(request, Action.deactivateAndCloudDelete, instanceIdMap, version,
 
 585                 requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 590     @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/scaleOut")
 
 591     @Consumes(MediaType.APPLICATION_JSON)
 
 592     @Produces(MediaType.APPLICATION_JSON)
 
 593     @Operation(description = "VF Auto Scale Out", responses = @ApiResponse(
 
 594             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 596     public Response scaleOutVfModule(String request, @PathParam("version") String version,
 
 597             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
 
 598             @Context ContainerRequestContext requestContext) throws ApiException {
 
 599         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 600         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 601         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 602         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
 
 603         return serviceInstances(request, Action.scaleOut, instanceIdMap, version, requestId,
 
 604                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 608     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups")
 
 609     @Consumes(MediaType.APPLICATION_JSON)
 
 610     @Produces(MediaType.APPLICATION_JSON)
 
 611     @Operation(description = "Create VolumeGroup on a specified version, serviceInstance, vnfInstance",
 
 612             responses = @ApiResponse(
 
 613                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 615     public Response createVolumeGroupInstance(String request, @PathParam("version") String version,
 
 616             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
 
 617             @Context ContainerRequestContext requestContext) throws ApiException {
 
 618         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 619         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 620         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 621         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
 
 622         return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
 
 623                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 627     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}")
 
 628     @Consumes(MediaType.APPLICATION_JSON)
 
 629     @Produces(MediaType.APPLICATION_JSON)
 
 630     @Operation(description = "Update VolumeGroup on a specified version, serviceInstance, vnfInstance and volumeGroup",
 
 631             responses = @ApiResponse(
 
 632                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 634     public Response updateVolumeGroupInstance(String request, @PathParam("version") String version,
 
 635             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
 
 636             @PathParam("volumeGroupInstanceId") String volumeGroupInstanceId,
 
 637             @Context ContainerRequestContext requestContext) throws ApiException {
 
 638         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 639         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 640         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 641         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
 
 642         instanceIdMap.put("volumeGroupInstanceId", volumeGroupInstanceId);
 
 643         return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
 
 644                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 648     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}")
 
 649     @Consumes(MediaType.APPLICATION_JSON)
 
 650     @Produces(MediaType.APPLICATION_JSON)
 
 651     @Operation(description = "Delete provided VolumeGroup instance", responses = @ApiResponse(
 
 652             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 654     public Response deleteVolumeGroupInstance(String request, @PathParam("version") String version,
 
 655             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
 
 656             @PathParam("volumeGroupInstanceId") String volumeGroupInstanceId,
 
 657             @Context ContainerRequestContext requestContext) throws ApiException {
 
 658         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 659         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 660         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 661         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
 
 662         instanceIdMap.put("volumeGroupInstanceId", volumeGroupInstanceId);
 
 663         return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
 
 664                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 668     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks")
 
 669     @Consumes(MediaType.APPLICATION_JSON)
 
 670     @Produces(MediaType.APPLICATION_JSON)
 
 671     @Operation(description = "Create NetworkInstance on a specified version and serviceInstance ",
 
 672             responses = @ApiResponse(
 
 673                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 675     public Response createNetworkInstance(String request, @PathParam("version") String version,
 
 676             @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
 
 677             throws ApiException {
 
 678         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 679         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 680         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 681         return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
 
 682                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 686     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks/{networkInstanceId}")
 
 687     @Consumes(MediaType.APPLICATION_JSON)
 
 688     @Produces(MediaType.APPLICATION_JSON)
 
 689     @Operation(description = "Update VolumeGroup on a specified version, serviceInstance, networkInstance",
 
 690             responses = @ApiResponse(
 
 691                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 693     public Response updateNetworkInstance(String request, @PathParam("version") String version,
 
 694             @PathParam("serviceInstanceId") String serviceInstanceId,
 
 695             @PathParam("networkInstanceId") String networkInstanceId, @Context ContainerRequestContext requestContext)
 
 696             throws ApiException {
 
 697         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 698         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 699         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 700         instanceIdMap.put("networkInstanceId", networkInstanceId);
 
 701         return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
 
 702                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 706     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks/{networkInstanceId}")
 
 707     @Consumes(MediaType.APPLICATION_JSON)
 
 708     @Produces(MediaType.APPLICATION_JSON)
 
 709     @Operation(description = "Delete provided Network instance", responses = @ApiResponse(
 
 710             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 712     public Response deleteNetworkInstance(String request, @PathParam("version") String version,
 
 713             @PathParam("serviceInstanceId") String serviceInstanceId,
 
 714             @PathParam("networkInstanceId") String networkInstanceId, @Context ContainerRequestContext requestContext)
 
 715             throws ApiException {
 
 716         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 717         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 718         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 719         instanceIdMap.put("networkInstanceId", networkInstanceId);
 
 720         return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
 
 721                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 725     @Path("/{version:[vV][7]}/instanceGroups")
 
 726     @Consumes(MediaType.APPLICATION_JSON)
 
 727     @Produces(MediaType.APPLICATION_JSON)
 
 728     @Operation(description = "Create instanceGroups", responses = @ApiResponse(
 
 729             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 731     public Response createInstanceGroups(String request, @PathParam("version") String version,
 
 732             @Context ContainerRequestContext requestContext) throws ApiException {
 
 733         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 734         return serviceInstances(request, Action.createInstance, null, version, requestId,
 
 735                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 739     @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}")
 
 740     @Consumes(MediaType.APPLICATION_JSON)
 
 741     @Produces(MediaType.APPLICATION_JSON)
 
 742     @Operation(description = "Delete instanceGroup", responses = @ApiResponse(
 
 743             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 745     public Response deleteInstanceGroups(@PathParam("version") String version,
 
 746             @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext)
 
 747             throws ApiException {
 
 748         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 749         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 750         instanceIdMap.put(CommonConstants.INSTANCE_GROUP_INSTANCE_ID, instanceGroupId);
 
 751         return deleteInstanceGroups(Action.deleteInstance, instanceIdMap, version, requestId,
 
 752                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix), requestContext);
 
 756     @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}/addMembers")
 
 757     @Consumes(MediaType.APPLICATION_JSON)
 
 758     @Produces(MediaType.APPLICATION_JSON)
 
 759     @Operation(description = "Add instanceGroup members", responses = @ApiResponse(
 
 760             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 762     public Response addInstanceGroupMembers(String request, @PathParam("version") String version,
 
 763             @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext)
 
 764             throws ApiException {
 
 765         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 766         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 767         instanceIdMap.put(CommonConstants.INSTANCE_GROUP_INSTANCE_ID, instanceGroupId);
 
 768         return serviceInstances(request, Action.addMembers, instanceIdMap, version, requestId,
 
 769                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 773     @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}/removeMembers")
 
 774     @Consumes(MediaType.APPLICATION_JSON)
 
 775     @Produces(MediaType.APPLICATION_JSON)
 
 776     @Operation(description = "Remove instanceGroup members", responses = @ApiResponse(
 
 777             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 779     public Response removeInstanceGroupMembers(String request, @PathParam("version") String version,
 
 780             @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext)
 
 781             throws ApiException {
 
 782         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 783         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 784         instanceIdMap.put(CommonConstants.INSTANCE_GROUP_INSTANCE_ID, instanceGroupId);
 
 785         return serviceInstances(request, Action.removeMembers, instanceIdMap, version, requestId,
 
 786                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 790      * This method is used for POST a request to the BPEL client (BPMN).
 
 792      * Convert the requestJson to ServiceInstanceRequest(sir), create the msoRequest object, check whether this request
 
 793      * is already being processed in requestdb for duplicate check.
 
 795      * Based on the alacarte flag, sir and msoRequest will do the recipe lookup from the service and servicerecipe table
 
 796      * of catalogdb, and get the OrchestrationURI.
 
 798      * If the present request is not the duplicate request then this request will be saved in the requestdb. and will
 
 799      * POST a request to the BPMN engine at the OrchestrationURI fetched.
 
 801      * @param requestJSON Json fetched as body in the API call
 
 802      * @param action Type of action to be performed
 
 803      * @param instanceIdMap Map of instance ids of service/vnf/vf/configuration etc..
 
 804      * @param version Supported version of API
 
 805      * @param requestId Unique id for the request
 
 807      * @return response object
 
 808      * @throws ApiException
 
 810     public Response serviceInstances(String requestJSON, Actions action, HashMap<String, String> instanceIdMap,
 
 811             String version, String requestId, String requestUri) throws ApiException {
 
 812         return serviceInstances(requestJSON, action, instanceIdMap, version, requestId, requestUri, null);
 
 816     public Response serviceInstances(String requestJSON, Actions action, HashMap<String, String> instanceIdMap,
 
 817             String version, String requestId, String requestUri, HashMap<String, String> queryParams)
 
 818             throws ApiException {
 
 819         String serviceInstanceId;
 
 820         Boolean aLaCarte = null;
 
 821         ServiceInstancesRequest sir;
 
 822         String apiVersion = version.substring(1);
 
 824         sir = requestHandlerUtils.convertJsonToServiceInstanceRequest(requestJSON, action, requestId, requestUri);
 
 825         action = handleReplaceInstance(action, sir);
 
 826         requestValidatorListenerRunner.runValidations(requestUri, instanceIdMap, sir, queryParams);
 
 828         String requestScope = requestHandlerUtils.deriveRequestScope(action, sir, requestUri);
 
 829         InfraActiveRequests currentActiveReq =
 
 830                 msoRequest.createRequestObject(sir, action, requestId, Status.IN_PROGRESS, requestJSON, requestScope);
 
 831         if (sir.getRequestDetails().getRequestParameters() != null) {
 
 832             aLaCarte = sir.getRequestDetails().getRequestParameters().getALaCarte();
 
 835         requestHandlerUtils.parseRequest(sir, instanceIdMap, action, version, requestJSON, aLaCarte, requestId,
 
 837         if ((action == Action.replaceInstance || action == Action.replaceInstanceRetainAssignments)
 
 838                 && (requestScope.equals(ModelType.vnf.toString()) || requestScope.equals(ModelType.vfModule.toString()))
 
 839                 && sir.getRequestDetails().getCloudConfiguration() == null) {
 
 840             CloudConfiguration cloudConfiguration =
 
 841                     getCloudConfigurationOnReplace(requestScope, instanceIdMap, currentActiveReq);
 
 842             sir.getRequestDetails().setCloudConfiguration(cloudConfiguration);
 
 843             setCloudConfigurationCurrentActiveRequest(cloudConfiguration, currentActiveReq);
 
 845         requestHandlerUtils.setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
 
 847         String instanceName = null;
 
 848         if (sir.getRequestDetails().getRequestInfo() != null) {
 
 849             instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();
 
 851         boolean alaCarteFlag = msoRequest.getAlacarteFlag(sir);
 
 852         String vnfType = msoRequest.getVnfType(sir, requestScope);
 
 853         String networkType = msoRequest.getNetworkType(sir, requestScope);
 
 854         String sdcServiceModelVersion = msoRequest.getSDCServiceModelVersion(sir);
 
 855         String vfModuleType = msoRequest.getVfModuleType(sir, requestScope);
 
 857         if (requestScope.equalsIgnoreCase(ModelType.vnf.name()) && vnfType != null) {
 
 858             currentActiveReq.setVnfType(vnfType);
 
 859         } else if (requestScope.equalsIgnoreCase(ModelType.network.name()) && networkType != null) {
 
 860             currentActiveReq.setNetworkType(networkType);
 
 863         requestHandlerUtils.checkForDuplicateRequests(action, instanceIdMap, requestScope, currentActiveReq,
 
 866         ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
 
 868         RequestReferences referencesResponse = new RequestReferences();
 
 870         referencesResponse.setRequestId(requestId);
 
 872         serviceResponse.setRequestReferences(referencesResponse);
 
 873         RecipeLookupResult recipeLookupResult =
 
 874                 requestHandlerUtils.getServiceInstanceOrchestrationURI(sir, action, alaCarteFlag, currentActiveReq);
 
 875         String serviceInstanceType = requestHandlerUtils.getServiceType(requestScope, sir, alaCarteFlag);
 
 877         ModelInfo modelInfo = sir.getRequestDetails().getModelInfo();
 
 878         ModelType modelType = requestHandlerUtils.getModelType(action, modelInfo);
 
 880         Boolean isBaseVfModule = false;
 
 882         if (modelType.equals(ModelType.vfModule)) {
 
 883             isBaseVfModule = requestHandlerUtils.getIsBaseVfModule(modelInfo, action, vnfType, sdcServiceModelVersion,
 
 887         serviceInstanceId = requestHandlerUtils.setServiceInstanceId(requestScope, sir);
 
 889         String vfModuleId = "";
 
 890         String volumeGroupId = "";
 
 891         String networkId = "";
 
 892         String pnfCorrelationId = "";
 
 893         String instanceGroupId = null;
 
 895         if (sir.getVnfInstanceId() != null) {
 
 896             vnfId = sir.getVnfInstanceId();
 
 899         if (sir.getVfModuleInstanceId() != null) {
 
 900             vfModuleId = sir.getVfModuleInstanceId();
 
 903         if (sir.getVolumeGroupInstanceId() != null) {
 
 904             volumeGroupId = sir.getVolumeGroupInstanceId();
 
 907         if (sir.getNetworkInstanceId() != null) {
 
 908             networkId = sir.getNetworkInstanceId();
 
 910         if (sir.getInstanceGroupId() != null) {
 
 911             instanceGroupId = sir.getInstanceGroupId();
 
 914         pnfCorrelationId = getPnfCorrelationId(sir);
 
 917             infraActiveRequestsClient.save(currentActiveReq);
 
 918         } catch (Exception e) {
 
 919             logger.error("Exception occurred", e);
 
 920             ErrorLoggerInfo errorLoggerInfo =
 
 921                     new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, ErrorCode.DataError)
 
 922                             .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
 
 923             throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR,
 
 924                     ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e).errorInfo(errorLoggerInfo).build();
 
 927         if (!requestScope.equalsIgnoreCase(ModelType.service.name()) && action != Action.recreateInstance
 
 928                 && !(requestScope.equalsIgnoreCase(ModelType.vnf.name())
 
 929                         && (action == Action.replaceInstance || action == Action.replaceInstanceRetainAssignments))) {
 
 931         } else if (aLaCarte == null) {
 
 936         RequestClientParameter requestClientParameter;
 
 938             requestClientParameter = new RequestClientParameter.Builder().setRequestId(requestId)
 
 939                     .setBaseVfModule(isBaseVfModule).setRecipeTimeout(recipeLookupResult.getRecipeTimeout())
 
 940                     .setRequestAction(action.toString()).setServiceInstanceId(serviceInstanceId)
 
 941                     .setPnfCorrelationId(pnfCorrelationId).setVnfId(vnfId).setVfModuleId(vfModuleId)
 
 942                     .setVolumeGroupId(volumeGroupId).setNetworkId(networkId).setServiceType(serviceInstanceType)
 
 943                     .setVnfType(vnfType).setVfModuleType(vfModuleType).setNetworkType(networkType)
 
 944                     .setRequestDetails(requestHandlerUtils.mapJSONtoMSOStyle(requestJSON, sir, aLaCarte, action))
 
 945                     .setApiVersion(apiVersion).setALaCarte(aLaCarte).setRequestUri(requestUri)
 
 946                     .setInstanceGroupId(instanceGroupId).build();
 
 947         } catch (IOException e) {
 
 948             logger.error("Exception occurred", e);
 
 949             ErrorLoggerInfo errorLoggerInfo =
 
 950                     new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, ErrorCode.SchemaError)
 
 951                             .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
 
 952             throw new ValidateException.Builder("Unable to generate RequestClientParamter object" + e.getMessage(),
 
 953                     HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER).errorInfo(errorLoggerInfo)
 
 956         return requestHandlerUtils.postBPELRequest(currentActiveReq, requestClientParameter,
 
 957                 recipeLookupResult.getOrchestrationURI(), requestScope);
 
 965     protected Actions handleReplaceInstance(Actions action, ServiceInstancesRequest sir) {
 
 966         if (action != null && action.equals(Action.replaceInstance)
 
 967                 && sir.getRequestDetails().getRequestParameters().getRetainAssignments() != null
 
 968                 && sir.getRequestDetails().getRequestParameters().getRetainAssignments()) {
 
 969             action = Action.replaceInstanceRetainAssignments;
 
 975      * This method deletes the Instance Groups.
 
 977      * This method will check whether the request is not duplicate in requestdb. if its not then will save as a new
 
 978      * request. And will send a POST request to BEPL client to delete the Insatnce Groups.
 
 981      * @param instanceIdMap
 
 985      * @param requestContext
 
 987      * @throws ApiException
 
 989     public Response deleteInstanceGroups(Actions action, HashMap<String, String> instanceIdMap, String version,
 
 990             String requestId, String requestUri, ContainerRequestContext requestContext) throws ApiException {
 
 991         String instanceGroupId = instanceIdMap.get(CommonConstants.INSTANCE_GROUP_INSTANCE_ID);
 
 992         Boolean aLaCarte = true;
 
 993         String apiVersion = version.substring(1);
 
 994         ServiceInstancesRequest sir = new ServiceInstancesRequest();
 
 995         sir.setInstanceGroupId(instanceGroupId);
 
 997         String requestScope = ModelType.instanceGroup.toString();
 
 998         InfraActiveRequests currentActiveReq =
 
 999                 msoRequest.createRequestObject(sir, action, requestId, Status.IN_PROGRESS, null, requestScope);
 
1000         requestHandlerUtils.setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
 
1002             requestHandlerUtils.validateHeaders(requestContext);
 
1003         } catch (ValidationException e) {
 
1004             logger.error("Exception occurred", e);
 
1005             ErrorLoggerInfo errorLoggerInfo =
 
1006                     new ErrorLoggerInfo.Builder(MessageEnum.APIH_VALIDATION_ERROR, ErrorCode.SchemaError)
 
1007                             .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
 
1008             ValidateException validateException =
 
1009                     new ValidateException.Builder(e.getMessage(), HttpStatus.SC_BAD_REQUEST,
 
1010                             ErrorNumbers.SVC_BAD_PARAMETER).cause(e).errorInfo(errorLoggerInfo).build();
 
1011             requestHandlerUtils.updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
 
1012             throw validateException;
 
1015         requestHandlerUtils.checkForDuplicateRequests(action, instanceIdMap, requestScope, currentActiveReq, null);
 
1017         ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
 
1019         RequestReferences referencesResponse = new RequestReferences();
 
1021         referencesResponse.setRequestId(requestId);
 
1023         serviceResponse.setRequestReferences(referencesResponse);
 
1024         Boolean isBaseVfModule = false;
 
1026         RecipeLookupResult recipeLookupResult = new RecipeLookupResult("/mso/async/services/WorkflowActionBB", 180);
 
1029             infraActiveRequestsClient.save(currentActiveReq);
 
1030         } catch (Exception e) {
 
1031             logger.error("Exception occurred", e);
 
1032             ErrorLoggerInfo errorLoggerInfo =
 
1033                     new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, ErrorCode.DataError)
 
1034                             .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
 
1035             throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR,
 
1036                     ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e).errorInfo(errorLoggerInfo).build();
 
1039         RequestClientParameter requestClientParameter = new RequestClientParameter.Builder().setRequestId(requestId)
 
1040                 .setBaseVfModule(isBaseVfModule).setRecipeTimeout(recipeLookupResult.getRecipeTimeout())
 
1041                 .setRequestAction(action.toString()).setApiVersion(apiVersion).setALaCarte(aLaCarte)
 
1042                 .setRequestUri(requestUri).setInstanceGroupId(instanceGroupId).build();
 
1045         return requestHandlerUtils.postBPELRequest(currentActiveReq, requestClientParameter,
 
1046                 recipeLookupResult.getOrchestrationURI(), requestScope);
 
1049     protected String getPnfCorrelationId(ServiceInstancesRequest sir) {
 
1050         return Optional.of(sir).map(ServiceInstancesRequest::getRequestDetails)
 
1051                 .map(RequestDetails::getRequestParameters).map(parameters -> parameters.getUserParamValue("pnfId"))
 
1055     private Response configurationRecipeLookup(String requestJSON, Action action, HashMap<String, String> instanceIdMap,
 
1056             String version, String requestId, String requestUri) throws ApiException {
 
1057         String serviceInstanceId;
 
1058         Boolean aLaCarte = null;
 
1059         String apiVersion = version.substring(1);
 
1060         ServiceInstancesRequest sir;
 
1062         sir = requestHandlerUtils.convertJsonToServiceInstanceRequest(requestJSON, action, requestId, requestUri);
 
1063         String requestScope = requestHandlerUtils.deriveRequestScope(action, sir, requestUri);
 
1064         InfraActiveRequests currentActiveReq =
 
1065                 msoRequest.createRequestObject(sir, action, requestId, Status.IN_PROGRESS, requestJSON, requestScope);
 
1066         if (sir.getRequestDetails().getRequestParameters() != null) {
 
1067             aLaCarte = sir.getRequestDetails().getRequestParameters().getALaCarte();
 
1070         requestHandlerUtils.parseRequest(sir, instanceIdMap, action, version, requestJSON, aLaCarte, requestId,
 
1072         requestHandlerUtils.setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
 
1073         String instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();
 
1075         requestHandlerUtils.checkForDuplicateRequests(action, instanceIdMap, requestScope, currentActiveReq,
 
1078         ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
 
1079         RequestReferences referencesResponse = new RequestReferences();
 
1080         referencesResponse.setRequestId(requestId);
 
1081         serviceResponse.setRequestReferences(referencesResponse);
 
1083         String orchestrationUri = env.getProperty(CommonConstants.ALACARTE_ORCHESTRATION);
 
1084         String timeOut = env.getProperty(CommonConstants.ALACARTE_RECIPE_TIMEOUT);
 
1086         if (StringUtils.isBlank(orchestrationUri) || StringUtils.isBlank(timeOut)) {
 
1087             String error = StringUtils.isBlank(orchestrationUri) ? "ALaCarte Orchestration URI not found in properties"
 
1088                     : "ALaCarte Recipe Timeout not found in properties";
 
1090             ErrorLoggerInfo errorLoggerInfo =
 
1091                     new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, ErrorCode.DataError)
 
1092                             .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
 
1094             ValidateException validateException = new ValidateException.Builder(error, HttpStatus.SC_NOT_FOUND,
 
1095                     ErrorNumbers.SVC_GENERAL_SERVICE_ERROR).errorInfo(errorLoggerInfo).build();
 
1097             requestHandlerUtils.updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
 
1099             throw validateException;
 
1103         serviceInstanceId = "";
 
1104         String configurationId = "";
 
1105         String pnfCorrelationId = "";
 
1107         if (sir.getServiceInstanceId() != null) {
 
1108             serviceInstanceId = sir.getServiceInstanceId();
 
1111         if (sir.getConfigurationId() != null) {
 
1112             configurationId = sir.getConfigurationId();
 
1115         pnfCorrelationId = getPnfCorrelationId(sir);
 
1118             infraActiveRequestsClient.save(currentActiveReq);
 
1119         } catch (Exception e) {
 
1120             ErrorLoggerInfo errorLoggerInfo =
 
1121                     new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, ErrorCode.DataError)
 
1122                             .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
 
1123             throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR,
 
1124                     ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e).errorInfo(errorLoggerInfo).build();
 
1127         if (!requestScope.equalsIgnoreCase(ModelType.service.name())) {
 
1129         } else if (aLaCarte == null) {
 
1132         RequestClientParameter requestClientParameter = null;
 
1134             requestClientParameter = new RequestClientParameter.Builder().setRequestId(requestId).setBaseVfModule(false)
 
1135                     .setRecipeTimeout(Integer.parseInt(timeOut)).setRequestAction(action.toString())
 
1136                     .setServiceInstanceId(serviceInstanceId).setPnfCorrelationId(pnfCorrelationId)
 
1137                     .setConfigurationId(configurationId)
 
1138                     .setRequestDetails(requestHandlerUtils.mapJSONtoMSOStyle(requestJSON, sir, aLaCarte, action))
 
1139                     .setApiVersion(apiVersion).setALaCarte(aLaCarte).setRequestUri(requestUri).build();
 
1140         } catch (IOException e) {
 
1141             ErrorLoggerInfo errorLoggerInfo =
 
1142                     new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, ErrorCode.SchemaError)
 
1143                             .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
 
1144             throw new ValidateException.Builder("Unable to generate RequestClientParamter object" + e.getMessage(),
 
1145                     HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER).errorInfo(errorLoggerInfo)
 
1149         return requestHandlerUtils.postBPELRequest(currentActiveReq, requestClientParameter, orchestrationUri,
 
1153     protected CloudConfiguration getCloudConfigurationOnReplace(String requestScope,
 
1154             HashMap<String, String> instanceIdMap, InfraActiveRequests currentActiveReq) throws ApiException {
 
1155         logger.debug("Replace request is missing cloudConfiguration, autofilling from create.");
 
1156         CloudConfiguration cloudConfiguration = null;
 
1157         if (requestScope.equals(ModelType.vfModule.toString())) {
 
1158             cloudConfiguration = bpmnRequestBuilder.getCloudConfigurationVfModuleReplace(
 
1159                     instanceIdMap.get("vnfInstanceId"), instanceIdMap.get("vfModuleInstanceId"));
 
1161             cloudConfiguration = bpmnRequestBuilder.mapCloudConfigurationVnf(instanceIdMap.get("vnfInstanceId"));
 
1164         if (cloudConfiguration == null) {
 
1165             String errorMessage = "CloudConfiguration not found during autofill for replace request.";
 
1166             logger.error(errorMessage);
 
1167             updateStatus(currentActiveReq, Status.FAILED, errorMessage);
 
1168             throw new CloudConfigurationNotFoundException(
 
1169                     "CloudConfiguration not found during autofill for replace request.");
 
1171         return cloudConfiguration;
 
1174     protected void setCloudConfigurationCurrentActiveRequest(CloudConfiguration cloudConfiguration,
 
1175             InfraActiveRequests currentActiveRequest) {
 
1176         if (cloudConfiguration.getLcpCloudRegionId() != null) {
 
1177             currentActiveRequest.setCloudRegion(cloudConfiguration.getLcpCloudRegionId());
 
1180         if (cloudConfiguration.getTenantId() != null) {
 
1181             currentActiveRequest.setTenantId(cloudConfiguration.getTenantId());