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.handler.AbstractRestHandler;
 
  50 import org.onap.so.apihandlerinfra.infra.rest.validators.RequestValidatorListenerRunner;
 
  51 import org.onap.so.apihandlerinfra.logging.ErrorLoggerInfo;
 
  52 import org.onap.so.constants.Status;
 
  53 import org.onap.so.db.catalog.client.CatalogDbClient;
 
  54 import org.onap.so.db.request.beans.InfraActiveRequests;
 
  55 import org.onap.so.db.request.client.RequestsDbClient;
 
  56 import org.onap.so.exceptions.ValidationException;
 
  57 import org.onap.so.logger.ErrorCode;
 
  58 import org.onap.so.logger.MessageEnum;
 
  59 import org.onap.so.serviceinstancebeans.ModelInfo;
 
  60 import org.onap.so.serviceinstancebeans.ModelType;
 
  61 import org.onap.so.serviceinstancebeans.RequestDetails;
 
  62 import org.onap.so.serviceinstancebeans.RequestReferences;
 
  63 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
 
  64 import org.onap.so.serviceinstancebeans.ServiceInstancesResponse;
 
  65 import org.slf4j.Logger;
 
  66 import org.slf4j.LoggerFactory;
 
  67 import org.springframework.beans.factory.annotation.Autowired;
 
  68 import org.springframework.core.env.Environment;
 
  69 import org.springframework.stereotype.Component;
 
  70 import org.springframework.web.client.RestTemplate;
 
  71 import io.swagger.v3.oas.annotations.OpenAPIDefinition;
 
  72 import io.swagger.v3.oas.annotations.Operation;
 
  73 import io.swagger.v3.oas.annotations.info.Info;
 
  74 import io.swagger.v3.oas.annotations.media.ArraySchema;
 
  75 import io.swagger.v3.oas.annotations.media.Content;
 
  76 import io.swagger.v3.oas.annotations.media.Schema;
 
  77 import io.swagger.v3.oas.annotations.responses.ApiResponse;
 
  80 @Path("/onap/so/infra/serviceInstantiation")
 
  81 @OpenAPIDefinition(info = @Info(title = "/onap/so/infra/serviceInstantiation",
 
  82         description = "Infrastructure API Requests for Service Instances"))
 
  83 public class ServiceInstances extends AbstractRestHandler {
 
  85     private static Logger logger = LoggerFactory.getLogger(MsoRequest.class);
 
  86     private static String uriPrefix = "/serviceInstantiation/";
 
  87     private static final String SAVE_TO_DB = "save instance to db";
 
  90     private Environment env;
 
  93     private RestTemplate restTemplate;
 
  96     private CatalogDbClient catalogDbClient;
 
  99     private RequestsDbClient infraActiveRequestsClient;
 
 102     private MsoRequest msoRequest;
 
 105     private RequestHandlerUtils requestHandlerUtils;
 
 108     private RequestValidatorListenerRunner requestValidatorListenerRunner;
 
 111     @Path("/{version:[vV][5-7]}/serviceInstances")
 
 112     @Consumes(MediaType.APPLICATION_JSON)
 
 113     @Produces(MediaType.APPLICATION_JSON)
 
 114     @Operation(description = "Create a Service Instance on a version provided", responses = @ApiResponse(
 
 115             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 117     public Response createServiceInstance(String request, @PathParam("version") String version,
 
 118             @Context ContainerRequestContext requestContext) throws ApiException {
 
 119         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 120         return serviceInstances(request, Action.createInstance, null, version, requestId,
 
 121                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 125     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/activate")
 
 126     @Consumes(MediaType.APPLICATION_JSON)
 
 127     @Produces(MediaType.APPLICATION_JSON)
 
 128     @Operation(description = "Activate provided Service Instance", responses = @ApiResponse(
 
 129             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 131     public Response activateServiceInstance(String request, @PathParam("version") String version,
 
 132             @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
 
 133             throws ApiException {
 
 134         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 135         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 136         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 137         return serviceInstances(request, Action.activateInstance, instanceIdMap, version, requestId,
 
 138                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 142     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/deactivate")
 
 143     @Consumes(MediaType.APPLICATION_JSON)
 
 144     @Produces(MediaType.APPLICATION_JSON)
 
 145     @Operation(description = "Deactivate provided Service Instance", responses = @ApiResponse(
 
 146             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 148     public Response deactivateServiceInstance(String request, @PathParam("version") String version,
 
 149             @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
 
 150             throws ApiException {
 
 151         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 152         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 153         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 154         return serviceInstances(request, Action.deactivateInstance, instanceIdMap, version, requestId,
 
 155                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 159     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}")
 
 160     @Consumes(MediaType.APPLICATION_JSON)
 
 161     @Produces(MediaType.APPLICATION_JSON)
 
 162     @Operation(description = "Delete provided Service Instance", responses = @ApiResponse(
 
 163             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 165     public Response deleteServiceInstance(String request, @PathParam("version") String version,
 
 166             @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
 
 167             throws ApiException {
 
 168         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 169         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 170         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 171         return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
 
 172                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 176     @Path("/{version:[vV][7]}/serviceInstances/assign")
 
 177     @Consumes(MediaType.APPLICATION_JSON)
 
 178     @Produces(MediaType.APPLICATION_JSON)
 
 179     @Operation(description = "Assign Service Instance", responses = @ApiResponse(
 
 180             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 182     public Response assignServiceInstance(String request, @PathParam("version") String version,
 
 183             @Context ContainerRequestContext requestContext) throws ApiException {
 
 184         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 185         return serviceInstances(request, Action.assignInstance, null, version, requestId,
 
 186                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 190     @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/unassign")
 
 191     @Consumes(MediaType.APPLICATION_JSON)
 
 192     @Produces(MediaType.APPLICATION_JSON)
 
 193     @Operation(description = "Unassign Service Instance", responses = @ApiResponse(
 
 194             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 196     public Response unassignServiceInstance(String request, @PathParam("version") String version,
 
 197             @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
 
 198             throws ApiException {
 
 199         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 200         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 201         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 202         return serviceInstances(request, Action.unassignInstance, instanceIdMap, version, requestId,
 
 203                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 207     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations")
 
 208     @Consumes(MediaType.APPLICATION_JSON)
 
 209     @Produces(MediaType.APPLICATION_JSON)
 
 210     @Operation(description = "Create Port Mirroring Configuration", responses = @ApiResponse(
 
 211             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 213     public Response createPortConfiguration(String request, @PathParam("version") String version,
 
 214             @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
 
 215             throws ApiException {
 
 216         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 217         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 218         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 219         return configurationRecipeLookup(request, Action.createInstance, instanceIdMap, version, requestId,
 
 220                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 224     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}")
 
 225     @Consumes(MediaType.APPLICATION_JSON)
 
 226     @Produces(MediaType.APPLICATION_JSON)
 
 227     @Operation(description = "Delete provided Port", responses = @ApiResponse(
 
 228             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 230     public Response deletePortConfiguration(String request, @PathParam("version") String version,
 
 231             @PathParam("serviceInstanceId") String serviceInstanceId,
 
 232             @PathParam("configurationInstanceId") String configurationInstanceId,
 
 233             @Context ContainerRequestContext requestContext) throws ApiException {
 
 234         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 235         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 236         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 237         instanceIdMap.put("configurationInstanceId", configurationInstanceId);
 
 238         return configurationRecipeLookup(request, Action.deleteInstance, instanceIdMap, version, requestId,
 
 239                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 243     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/enablePort")
 
 244     @Consumes(MediaType.APPLICATION_JSON)
 
 245     @Produces(MediaType.APPLICATION_JSON)
 
 246     @Operation(description = "Enable Port Mirroring", responses = @ApiResponse(
 
 247             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 249     public Response enablePort(String request, @PathParam("version") String version,
 
 250             @PathParam("serviceInstanceId") String serviceInstanceId,
 
 251             @PathParam("configurationInstanceId") String configurationInstanceId,
 
 252             @Context ContainerRequestContext requestContext) throws ApiException {
 
 253         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 254         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 255         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 256         instanceIdMap.put("configurationInstanceId", configurationInstanceId);
 
 257         return configurationRecipeLookup(request, Action.enablePort, instanceIdMap, version, requestId,
 
 258                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 262     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/disablePort")
 
 263     @Consumes(MediaType.APPLICATION_JSON)
 
 264     @Produces(MediaType.APPLICATION_JSON)
 
 265     @Operation(description = "Disable Port Mirroring", responses = @ApiResponse(
 
 266             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 268     public Response disablePort(String request, @PathParam("version") String version,
 
 269             @PathParam("serviceInstanceId") String serviceInstanceId,
 
 270             @PathParam("configurationInstanceId") String configurationInstanceId,
 
 271             @Context ContainerRequestContext requestContext) throws ApiException {
 
 272         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 273         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 274         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 275         instanceIdMap.put("configurationInstanceId", configurationInstanceId);
 
 276         return configurationRecipeLookup(request, Action.disablePort, instanceIdMap, version, requestId,
 
 277                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 281     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/activate")
 
 282     @Consumes(MediaType.APPLICATION_JSON)
 
 283     @Produces(MediaType.APPLICATION_JSON)
 
 284     @Operation(description = "Activate Port Mirroring", responses = @ApiResponse(
 
 285             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 287     public Response activatePort(String request, @PathParam("version") String version,
 
 288             @PathParam("serviceInstanceId") String serviceInstanceId,
 
 289             @PathParam("configurationInstanceId") String configurationInstanceId,
 
 290             @Context ContainerRequestContext requestContext) throws ApiException {
 
 291         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 292         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 293         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 294         instanceIdMap.put("configurationInstanceId", configurationInstanceId);
 
 295         return configurationRecipeLookup(request, Action.activateInstance, instanceIdMap, version, requestId,
 
 296                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 300     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/deactivate")
 
 301     @Consumes(MediaType.APPLICATION_JSON)
 
 302     @Produces(MediaType.APPLICATION_JSON)
 
 303     @Operation(description = "Deactivate Port Mirroring", responses = @ApiResponse(
 
 304             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 306     public Response deactivatePort(String request, @PathParam("version") String version,
 
 307             @PathParam("serviceInstanceId") String serviceInstanceId,
 
 308             @PathParam("configurationInstanceId") String configurationInstanceId,
 
 309             @Context ContainerRequestContext requestContext) throws ApiException {
 
 310         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 311         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 312         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 313         instanceIdMap.put("configurationInstanceId", configurationInstanceId);
 
 314         return configurationRecipeLookup(request, Action.deactivateInstance, instanceIdMap, version, requestId,
 
 315                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 319     @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/addRelationships")
 
 320     @Consumes(MediaType.APPLICATION_JSON)
 
 321     @Produces(MediaType.APPLICATION_JSON)
 
 322     @Operation(description = "Add Relationships to a Service Instance", responses = @ApiResponse(
 
 323             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 325     public Response addRelationships(String request, @PathParam("version") String version,
 
 326             @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
 
 327             throws ApiException {
 
 328         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 329         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 330         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 331         return configurationRecipeLookup(request, Action.addRelationships, instanceIdMap, version, requestId,
 
 332                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 336     @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/removeRelationships")
 
 337     @Consumes(MediaType.APPLICATION_JSON)
 
 338     @Produces(MediaType.APPLICATION_JSON)
 
 339     @Operation(description = "Remove Relationships from Service Instance", responses = @ApiResponse(
 
 340             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 342     public Response removeRelationships(String request, @PathParam("version") String version,
 
 343             @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
 
 344             throws ApiException {
 
 345         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 346         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 347         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 348         return configurationRecipeLookup(request, Action.removeRelationships, instanceIdMap, version, requestId,
 
 349                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 353     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs")
 
 354     @Consumes(MediaType.APPLICATION_JSON)
 
 355     @Produces(MediaType.APPLICATION_JSON)
 
 356     @Operation(description = "Create VNF on a specified version and serviceInstance", responses = @ApiResponse(
 
 357             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 359     public Response createVnfInstance(String request, @PathParam("version") String version,
 
 360             @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
 
 361             throws ApiException {
 
 362         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 363         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 364         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 366             return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
 
 367                     requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 368         } catch (Exception e) {
 
 369             logger.error("Error in vnf", e);
 
 375     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/replace")
 
 376     @Consumes(MediaType.APPLICATION_JSON)
 
 377     @Produces(MediaType.APPLICATION_JSON)
 
 378     @Operation(description = "Replace provided VNF instance", responses = @ApiResponse(
 
 379             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 381     public Response replaceVnfInstance(String request, @PathParam("version") String version,
 
 382             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
 
 383             @Context ContainerRequestContext requestContext) throws ApiException {
 
 384         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 385         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 386         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 387         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
 
 388         return serviceInstances(request, Action.replaceInstance, instanceIdMap, version, requestId,
 
 389                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 393     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}")
 
 394     @Consumes(MediaType.APPLICATION_JSON)
 
 395     @Produces(MediaType.APPLICATION_JSON)
 
 396     @Operation(description = "Update VNF on a specified version, serviceInstance and vnfInstance",
 
 397             responses = @ApiResponse(
 
 398                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 400     public Response updateVnfInstance(String request, @PathParam("version") String version,
 
 401             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
 
 402             @Context ContainerRequestContext requestContext) throws ApiException {
 
 403         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 404         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 405         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 406         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
 
 407         return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
 
 408                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 412     @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/applyUpdatedConfig")
 
 413     @Consumes(MediaType.APPLICATION_JSON)
 
 414     @Produces(MediaType.APPLICATION_JSON)
 
 415     @Operation(description = "Apply updated configuration", responses = @ApiResponse(
 
 416             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 417     public Response applyUpdatedConfig(String request, @PathParam("version") String version,
 
 418             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
 
 419             @Context ContainerRequestContext requestContext) throws ApiException {
 
 420         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 421         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 422         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 423         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
 
 424         return serviceInstances(request, Action.applyUpdatedConfig, instanceIdMap, version, requestId,
 
 425                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 429     @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/recreate")
 
 430     @Consumes(MediaType.APPLICATION_JSON)
 
 431     @Produces(MediaType.APPLICATION_JSON)
 
 432     @Operation(description = "Recreate VNF Instance", responses = @ApiResponse(
 
 433             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 434     public Response recreateVnfInstance(String request, @PathParam("version") String version,
 
 435             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
 
 436             @Context ContainerRequestContext requestContext) throws ApiException {
 
 437         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 438         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 439         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 440         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
 
 441         return serviceInstances(request, Action.recreateInstance, instanceIdMap, version, requestId,
 
 442                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 446     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}")
 
 447     @Consumes(MediaType.APPLICATION_JSON)
 
 448     @Produces(MediaType.APPLICATION_JSON)
 
 449     @Operation(description = "Delete provided VNF instance", responses = @ApiResponse(
 
 450             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 452     public Response deleteVnfInstance(String request, @PathParam("version") String version,
 
 453             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
 
 454             @Context ContainerRequestContext requestContext) throws ApiException {
 
 455         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 456         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 457         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 458         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
 
 459         return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
 
 460                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 464     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules")
 
 465     @Consumes(MediaType.APPLICATION_JSON)
 
 466     @Produces(MediaType.APPLICATION_JSON)
 
 467     @Operation(description = "Create VfModule on a specified version, serviceInstance and vnfInstance",
 
 468             responses = @ApiResponse(
 
 469                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 471     public Response createVfModuleInstance(String request, @PathParam("version") String version,
 
 472             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
 
 473             @Context ContainerRequestContext requestContext) throws ApiException {
 
 474         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 475         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 476         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 477         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
 
 478         return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
 
 479                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 483     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/replace")
 
 484     @Consumes(MediaType.APPLICATION_JSON)
 
 485     @Produces(MediaType.APPLICATION_JSON)
 
 486     @Operation(description = "Create VfModule on a specified version, serviceInstance and vnfInstance",
 
 487             responses = @ApiResponse(
 
 488                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 490     public Response replaceVfModuleInstance(String request, @PathParam("version") String version,
 
 491             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
 
 492             @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
 
 493             throws ApiException {
 
 494         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 495         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 496         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 497         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
 
 498         instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
 
 499         return serviceInstances(request, Action.replaceInstance, instanceIdMap, version, requestId,
 
 500                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 504     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}")
 
 505     @Consumes(MediaType.APPLICATION_JSON)
 
 506     @Produces(MediaType.APPLICATION_JSON)
 
 507     @Operation(description = "Update VfModule on a specified version, serviceInstance, vnfInstance and vfModule",
 
 508             responses = @ApiResponse(
 
 509                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 511     public Response updateVfModuleInstance(String request, @PathParam("version") String version,
 
 512             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
 
 513             @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
 
 514             throws ApiException {
 
 515         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 516         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 517         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 518         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
 
 519         instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
 
 520         return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
 
 521                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 525     @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/inPlaceSoftwareUpdate")
 
 526     @Consumes(MediaType.APPLICATION_JSON)
 
 527     @Produces(MediaType.APPLICATION_JSON)
 
 528     @Operation(description = "Perform VNF software update", responses = @ApiResponse(
 
 529             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 531     public Response inPlaceSoftwareUpdate(String request, @PathParam("version") String version,
 
 532             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
 
 533             @Context ContainerRequestContext requestContext) throws ApiException {
 
 534         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 535         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 536         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 537         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
 
 538         return serviceInstances(request, Action.inPlaceSoftwareUpdate, instanceIdMap, version, requestId,
 
 539                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 543     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}")
 
 544     @Consumes(MediaType.APPLICATION_JSON)
 
 545     @Produces(MediaType.APPLICATION_JSON)
 
 546     @Operation(description = "Delete provided VfModule instance", responses = @ApiResponse(
 
 547             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 549     public Response deleteVfModuleInstance(String request, @PathParam("version") String version,
 
 550             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
 
 551             @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
 
 552             throws ApiException {
 
 553         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 554         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 555         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 556         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
 
 557         instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
 
 558         return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
 
 559                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 563     @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/deactivateAndCloudDelete")
 
 564     @Consumes(MediaType.APPLICATION_JSON)
 
 565     @Produces(MediaType.APPLICATION_JSON)
 
 566     @Operation(description = "Deactivate and Cloud Delete VfModule instance", responses = @ApiResponse(
 
 567             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 569     public Response deactivateAndCloudDeleteVfModuleInstance(String request, @PathParam("version") String version,
 
 570             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
 
 571             @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
 
 572             throws ApiException {
 
 573         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 574         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 575         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 576         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
 
 577         instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
 
 578         Response response = serviceInstances(request, Action.deactivateAndCloudDelete, instanceIdMap, version,
 
 579                 requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 584     @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/scaleOut")
 
 585     @Consumes(MediaType.APPLICATION_JSON)
 
 586     @Produces(MediaType.APPLICATION_JSON)
 
 587     @Operation(description = "VF Auto Scale Out", responses = @ApiResponse(
 
 588             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 590     public Response scaleOutVfModule(String request, @PathParam("version") String version,
 
 591             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
 
 592             @Context ContainerRequestContext requestContext) throws ApiException {
 
 593         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 594         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 595         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 596         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
 
 597         return serviceInstances(request, Action.scaleOut, instanceIdMap, version, requestId,
 
 598                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 602     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups")
 
 603     @Consumes(MediaType.APPLICATION_JSON)
 
 604     @Produces(MediaType.APPLICATION_JSON)
 
 605     @Operation(description = "Create VolumeGroup on a specified version, serviceInstance, vnfInstance",
 
 606             responses = @ApiResponse(
 
 607                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 609     public Response createVolumeGroupInstance(String request, @PathParam("version") String version,
 
 610             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
 
 611             @Context ContainerRequestContext requestContext) throws ApiException {
 
 612         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 613         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 614         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 615         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
 
 616         return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
 
 617                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 621     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}")
 
 622     @Consumes(MediaType.APPLICATION_JSON)
 
 623     @Produces(MediaType.APPLICATION_JSON)
 
 624     @Operation(description = "Update VolumeGroup on a specified version, serviceInstance, vnfInstance and volumeGroup",
 
 625             responses = @ApiResponse(
 
 626                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 628     public Response updateVolumeGroupInstance(String request, @PathParam("version") String version,
 
 629             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
 
 630             @PathParam("volumeGroupInstanceId") String volumeGroupInstanceId,
 
 631             @Context ContainerRequestContext requestContext) throws ApiException {
 
 632         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 633         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 634         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 635         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
 
 636         instanceIdMap.put("volumeGroupInstanceId", volumeGroupInstanceId);
 
 637         return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
 
 638                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 642     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}")
 
 643     @Consumes(MediaType.APPLICATION_JSON)
 
 644     @Produces(MediaType.APPLICATION_JSON)
 
 645     @Operation(description = "Delete provided VolumeGroup instance", responses = @ApiResponse(
 
 646             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 648     public Response deleteVolumeGroupInstance(String request, @PathParam("version") String version,
 
 649             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
 
 650             @PathParam("volumeGroupInstanceId") String volumeGroupInstanceId,
 
 651             @Context ContainerRequestContext requestContext) throws ApiException {
 
 652         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 653         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 654         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 655         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
 
 656         instanceIdMap.put("volumeGroupInstanceId", volumeGroupInstanceId);
 
 657         return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
 
 658                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 662     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks")
 
 663     @Consumes(MediaType.APPLICATION_JSON)
 
 664     @Produces(MediaType.APPLICATION_JSON)
 
 665     @Operation(description = "Create NetworkInstance on a specified version and serviceInstance ",
 
 666             responses = @ApiResponse(
 
 667                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 669     public Response createNetworkInstance(String request, @PathParam("version") String version,
 
 670             @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
 
 671             throws ApiException {
 
 672         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 673         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 674         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 675         return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
 
 676                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 680     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks/{networkInstanceId}")
 
 681     @Consumes(MediaType.APPLICATION_JSON)
 
 682     @Produces(MediaType.APPLICATION_JSON)
 
 683     @Operation(description = "Update VolumeGroup on a specified version, serviceInstance, networkInstance",
 
 684             responses = @ApiResponse(
 
 685                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 687     public Response updateNetworkInstance(String request, @PathParam("version") String version,
 
 688             @PathParam("serviceInstanceId") String serviceInstanceId,
 
 689             @PathParam("networkInstanceId") String networkInstanceId, @Context ContainerRequestContext requestContext)
 
 690             throws ApiException {
 
 691         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 692         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 693         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 694         instanceIdMap.put("networkInstanceId", networkInstanceId);
 
 695         return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
 
 696                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 700     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks/{networkInstanceId}")
 
 701     @Consumes(MediaType.APPLICATION_JSON)
 
 702     @Produces(MediaType.APPLICATION_JSON)
 
 703     @Operation(description = "Delete provided Network instance", responses = @ApiResponse(
 
 704             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 706     public Response deleteNetworkInstance(String request, @PathParam("version") String version,
 
 707             @PathParam("serviceInstanceId") String serviceInstanceId,
 
 708             @PathParam("networkInstanceId") String networkInstanceId, @Context ContainerRequestContext requestContext)
 
 709             throws ApiException {
 
 710         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 711         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 712         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
 
 713         instanceIdMap.put("networkInstanceId", networkInstanceId);
 
 714         return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
 
 715                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 719     @Path("/{version:[vV][7]}/instanceGroups")
 
 720     @Consumes(MediaType.APPLICATION_JSON)
 
 721     @Produces(MediaType.APPLICATION_JSON)
 
 722     @Operation(description = "Create instanceGroups", responses = @ApiResponse(
 
 723             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 725     public Response createInstanceGroups(String request, @PathParam("version") String version,
 
 726             @Context ContainerRequestContext requestContext) throws ApiException {
 
 727         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 728         return serviceInstances(request, Action.createInstance, null, version, requestId,
 
 729                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 733     @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}")
 
 734     @Consumes(MediaType.APPLICATION_JSON)
 
 735     @Produces(MediaType.APPLICATION_JSON)
 
 736     @Operation(description = "Delete instanceGroup", responses = @ApiResponse(
 
 737             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 739     public Response deleteInstanceGroups(@PathParam("version") String version,
 
 740             @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext)
 
 741             throws ApiException {
 
 742         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 743         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 744         instanceIdMap.put(CommonConstants.INSTANCE_GROUP_INSTANCE_ID, instanceGroupId);
 
 745         return deleteInstanceGroups(Action.deleteInstance, instanceIdMap, version, requestId,
 
 746                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix), requestContext);
 
 750     @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}/addMembers")
 
 751     @Consumes(MediaType.APPLICATION_JSON)
 
 752     @Produces(MediaType.APPLICATION_JSON)
 
 753     @Operation(description = "Add instanceGroup members", responses = @ApiResponse(
 
 754             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 756     public Response addInstanceGroupMembers(String request, @PathParam("version") String version,
 
 757             @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext)
 
 758             throws ApiException {
 
 759         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 760         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 761         instanceIdMap.put(CommonConstants.INSTANCE_GROUP_INSTANCE_ID, instanceGroupId);
 
 762         return serviceInstances(request, Action.addMembers, instanceIdMap, version, requestId,
 
 763                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 767     @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}/removeMembers")
 
 768     @Consumes(MediaType.APPLICATION_JSON)
 
 769     @Produces(MediaType.APPLICATION_JSON)
 
 770     @Operation(description = "Remove instanceGroup members", responses = @ApiResponse(
 
 771             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
 
 773     public Response removeInstanceGroupMembers(String request, @PathParam("version") String version,
 
 774             @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext)
 
 775             throws ApiException {
 
 776         String requestId = requestHandlerUtils.getRequestId(requestContext);
 
 777         HashMap<String, String> instanceIdMap = new HashMap<>();
 
 778         instanceIdMap.put(CommonConstants.INSTANCE_GROUP_INSTANCE_ID, instanceGroupId);
 
 779         return serviceInstances(request, Action.removeMembers, instanceIdMap, version, requestId,
 
 780                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
 
 784      * This method is used for POST a request to the BPEL client (BPMN).
 
 786      * Convert the requestJson to ServiceInstanceRequest(sir), create the msoRequest object, check whether this request
 
 787      * is already being processed in requestdb for duplicate check.
 
 789      * Based on the alacarte flag, sir and msoRequest will do the recipe lookup from the service and servicerecipe table
 
 790      * of catalogdb, and get the OrchestrationURI.
 
 792      * If the present request is not the duplicate request then this request will be saved in the requestdb. and will
 
 793      * POST a request to the BPMN engine at the OrchestrationURI fetched.
 
 795      * @param requestJSON Json fetched as body in the API call
 
 796      * @param action Type of action to be performed
 
 797      * @param instanceIdMap Map of instance ids of service/vnf/vf/configuration etc..
 
 798      * @param version Supported version of API
 
 799      * @param requestId Unique id for the request
 
 801      * @return response object
 
 802      * @throws ApiException
 
 804     public Response serviceInstances(String requestJSON, Actions action, HashMap<String, String> instanceIdMap,
 
 805             String version, String requestId, String requestUri) throws ApiException {
 
 806         return serviceInstances(requestJSON, action, instanceIdMap, version, requestId, requestUri, null);
 
 810     public Response serviceInstances(String requestJSON, Actions action, HashMap<String, String> instanceIdMap,
 
 811             String version, String requestId, String requestUri, HashMap<String, String> queryParams)
 
 812             throws ApiException {
 
 813         String serviceInstanceId;
 
 814         Boolean aLaCarte = null;
 
 815         ServiceInstancesRequest sir;
 
 816         String apiVersion = version.substring(1);
 
 818         sir = requestHandlerUtils.convertJsonToServiceInstanceRequest(requestJSON, action, requestId, requestUri);
 
 819         action = handleReplaceInstance(action, sir);
 
 820         requestValidatorListenerRunner.runValidations(requestUri, instanceIdMap, sir, queryParams);
 
 822         String requestScope = requestHandlerUtils.deriveRequestScope(action, sir, requestUri);
 
 823         InfraActiveRequests currentActiveReq =
 
 824                 msoRequest.createRequestObject(sir, action, requestId, Status.IN_PROGRESS, requestJSON, requestScope);
 
 825         if (sir.getRequestDetails().getRequestParameters() != null) {
 
 826             aLaCarte = sir.getRequestDetails().getRequestParameters().getALaCarte();
 
 828         requestHandlerUtils.parseRequest(sir, instanceIdMap, action, version, requestJSON, aLaCarte, requestId,
 
 830         requestHandlerUtils.setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
 
 832         int requestVersion = Integer.parseInt(version.substring(1));
 
 833         String instanceName = null;
 
 834         if (sir.getRequestDetails().getRequestInfo() != null) {
 
 835             instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();
 
 837         boolean alaCarteFlag = msoRequest.getAlacarteFlag(sir);
 
 838         String vnfType = msoRequest.getVnfType(sir, requestScope, action, requestVersion);
 
 839         String networkType = msoRequest.getNetworkType(sir, requestScope);
 
 840         String sdcServiceModelVersion = msoRequest.getSDCServiceModelVersion(sir);
 
 841         String vfModuleType = msoRequest.getVfModuleType(sir, requestScope, action, requestVersion);
 
 843         if (requestScope.equalsIgnoreCase(ModelType.vnf.name()) && vnfType != null) {
 
 844             currentActiveReq.setVnfType(vnfType);
 
 845         } else if (requestScope.equalsIgnoreCase(ModelType.network.name()) && networkType != null) {
 
 846             currentActiveReq.setNetworkType(networkType);
 
 849         requestHandlerUtils.checkForDuplicateRequests(action, instanceIdMap, requestScope, currentActiveReq,
 
 852         ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
 
 854         RequestReferences referencesResponse = new RequestReferences();
 
 856         referencesResponse.setRequestId(requestId);
 
 858         serviceResponse.setRequestReferences(referencesResponse);
 
 859         RecipeLookupResult recipeLookupResult =
 
 860                 requestHandlerUtils.getServiceInstanceOrchestrationURI(sir, action, alaCarteFlag, currentActiveReq);
 
 861         String serviceInstanceType = requestHandlerUtils.getServiceType(requestScope, sir, alaCarteFlag);
 
 863         ModelInfo modelInfo = sir.getRequestDetails().getModelInfo();
 
 864         ModelType modelType = requestHandlerUtils.getModelType(action, modelInfo);
 
 866         Boolean isBaseVfModule = false;
 
 868         if (modelType.equals(ModelType.vfModule)) {
 
 869             isBaseVfModule = requestHandlerUtils.getIsBaseVfModule(modelInfo, action, vnfType, sdcServiceModelVersion,
 
 873         serviceInstanceId = requestHandlerUtils.setServiceInstanceId(requestScope, sir);
 
 875         String vfModuleId = "";
 
 876         String volumeGroupId = "";
 
 877         String networkId = "";
 
 878         String pnfCorrelationId = "";
 
 879         String instanceGroupId = null;
 
 881         if (sir.getVnfInstanceId() != null) {
 
 882             vnfId = sir.getVnfInstanceId();
 
 885         if (sir.getVfModuleInstanceId() != null) {
 
 886             vfModuleId = sir.getVfModuleInstanceId();
 
 889         if (sir.getVolumeGroupInstanceId() != null) {
 
 890             volumeGroupId = sir.getVolumeGroupInstanceId();
 
 893         if (sir.getNetworkInstanceId() != null) {
 
 894             networkId = sir.getNetworkInstanceId();
 
 896         if (sir.getInstanceGroupId() != null) {
 
 897             instanceGroupId = sir.getInstanceGroupId();
 
 900         pnfCorrelationId = getPnfCorrelationId(sir);
 
 903             infraActiveRequestsClient.save(currentActiveReq);
 
 904         } catch (Exception e) {
 
 905             logger.error("Exception occurred", e);
 
 906             ErrorLoggerInfo errorLoggerInfo =
 
 907                     new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, ErrorCode.DataError)
 
 908                             .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
 
 909             throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR,
 
 910                     ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e).errorInfo(errorLoggerInfo).build();
 
 913         if (!requestScope.equalsIgnoreCase(ModelType.service.name()) && action != Action.recreateInstance) {
 
 915         } else if (aLaCarte == null) {
 
 920         RequestClientParameter requestClientParameter = null;
 
 922             requestClientParameter = new RequestClientParameter.Builder().setRequestId(requestId)
 
 923                     .setBaseVfModule(isBaseVfModule).setRecipeTimeout(recipeLookupResult.getRecipeTimeout())
 
 924                     .setRequestAction(action.toString()).setServiceInstanceId(serviceInstanceId)
 
 925                     .setPnfCorrelationId(pnfCorrelationId).setVnfId(vnfId).setVfModuleId(vfModuleId)
 
 926                     .setVolumeGroupId(volumeGroupId).setNetworkId(networkId).setServiceType(serviceInstanceType)
 
 927                     .setVnfType(vnfType).setVfModuleType(vfModuleType).setNetworkType(networkType)
 
 928                     .setRequestDetails(requestHandlerUtils.mapJSONtoMSOStyle(requestJSON, sir, aLaCarte, action))
 
 929                     .setApiVersion(apiVersion).setALaCarte(aLaCarte).setRequestUri(requestUri)
 
 930                     .setInstanceGroupId(instanceGroupId).build();
 
 931         } catch (IOException e) {
 
 932             logger.error("Exception occurred", e);
 
 933             ErrorLoggerInfo errorLoggerInfo =
 
 934                     new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, ErrorCode.SchemaError)
 
 935                             .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
 
 936             throw new ValidateException.Builder("Unable to generate RequestClientParamter object" + e.getMessage(),
 
 937                     HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER).errorInfo(errorLoggerInfo)
 
 940         return requestHandlerUtils.postBPELRequest(currentActiveReq, requestClientParameter,
 
 941                 recipeLookupResult.getOrchestrationURI(), requestScope);
 
 949     protected Actions handleReplaceInstance(Actions action, ServiceInstancesRequest sir) {
 
 950         if (action != null && action.equals(Action.replaceInstance)
 
 951                 && sir.getRequestDetails().getRequestParameters().getRetainAssignments() != null
 
 952                 && sir.getRequestDetails().getRequestParameters().getRetainAssignments()) {
 
 953             action = Action.replaceInstanceRetainAssignments;
 
 959      * This method deletes the Instance Groups.
 
 961      * This method will check whether the request is not duplicate in requestdb. if its not then will save as a new
 
 962      * request. And will send a POST request to BEPL client to delete the Insatnce Groups.
 
 965      * @param instanceIdMap
 
 969      * @param requestContext
 
 971      * @throws ApiException
 
 973     public Response deleteInstanceGroups(Actions action, HashMap<String, String> instanceIdMap, String version,
 
 974             String requestId, String requestUri, ContainerRequestContext requestContext) throws ApiException {
 
 975         String instanceGroupId = instanceIdMap.get(CommonConstants.INSTANCE_GROUP_INSTANCE_ID);
 
 976         Boolean aLaCarte = true;
 
 977         String apiVersion = version.substring(1);
 
 978         ServiceInstancesRequest sir = new ServiceInstancesRequest();
 
 979         sir.setInstanceGroupId(instanceGroupId);
 
 981         String requestScope = ModelType.instanceGroup.toString();
 
 982         InfraActiveRequests currentActiveReq =
 
 983                 msoRequest.createRequestObject(sir, action, requestId, Status.IN_PROGRESS, null, requestScope);
 
 984         requestHandlerUtils.setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
 
 986             requestHandlerUtils.validateHeaders(requestContext);
 
 987         } catch (ValidationException e) {
 
 988             logger.error("Exception occurred", e);
 
 989             ErrorLoggerInfo errorLoggerInfo =
 
 990                     new ErrorLoggerInfo.Builder(MessageEnum.APIH_VALIDATION_ERROR, ErrorCode.SchemaError)
 
 991                             .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
 
 992             ValidateException validateException =
 
 993                     new ValidateException.Builder(e.getMessage(), HttpStatus.SC_BAD_REQUEST,
 
 994                             ErrorNumbers.SVC_BAD_PARAMETER).cause(e).errorInfo(errorLoggerInfo).build();
 
 995             requestHandlerUtils.updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
 
 996             throw validateException;
 
 999         requestHandlerUtils.checkForDuplicateRequests(action, instanceIdMap, requestScope, currentActiveReq, null);
 
1001         ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
 
1003         RequestReferences referencesResponse = new RequestReferences();
 
1005         referencesResponse.setRequestId(requestId);
 
1007         serviceResponse.setRequestReferences(referencesResponse);
 
1008         Boolean isBaseVfModule = false;
 
1010         RecipeLookupResult recipeLookupResult = new RecipeLookupResult("/mso/async/services/WorkflowActionBB", 180);
 
1013             infraActiveRequestsClient.save(currentActiveReq);
 
1014         } catch (Exception e) {
 
1015             logger.error("Exception occurred", e);
 
1016             ErrorLoggerInfo errorLoggerInfo =
 
1017                     new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, ErrorCode.DataError)
 
1018                             .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
 
1019             throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR,
 
1020                     ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e).errorInfo(errorLoggerInfo).build();
 
1023         RequestClientParameter requestClientParameter = new RequestClientParameter.Builder().setRequestId(requestId)
 
1024                 .setBaseVfModule(isBaseVfModule).setRecipeTimeout(recipeLookupResult.getRecipeTimeout())
 
1025                 .setRequestAction(action.toString()).setApiVersion(apiVersion).setALaCarte(aLaCarte)
 
1026                 .setRequestUri(requestUri).setInstanceGroupId(instanceGroupId).build();
 
1029         return requestHandlerUtils.postBPELRequest(currentActiveReq, requestClientParameter,
 
1030                 recipeLookupResult.getOrchestrationURI(), requestScope);
 
1033     protected String getPnfCorrelationId(ServiceInstancesRequest sir) {
 
1034         return Optional.of(sir).map(ServiceInstancesRequest::getRequestDetails)
 
1035                 .map(RequestDetails::getRequestParameters).map(parameters -> parameters.getUserParamValue("pnfId"))
 
1039     private Response configurationRecipeLookup(String requestJSON, Action action, HashMap<String, String> instanceIdMap,
 
1040             String version, String requestId, String requestUri) throws ApiException {
 
1041         String serviceInstanceId;
 
1042         Boolean aLaCarte = null;
 
1043         String apiVersion = version.substring(1);
 
1044         boolean inProgress = false;
 
1045         ServiceInstancesRequest sir;
 
1047         sir = requestHandlerUtils.convertJsonToServiceInstanceRequest(requestJSON, action, requestId, requestUri);
 
1048         String requestScope = requestHandlerUtils.deriveRequestScope(action, sir, requestUri);
 
1049         InfraActiveRequests currentActiveReq =
 
1050                 msoRequest.createRequestObject(sir, action, requestId, Status.IN_PROGRESS, requestJSON, requestScope);
 
1051         if (sir.getRequestDetails().getRequestParameters() != null) {
 
1052             aLaCarte = sir.getRequestDetails().getRequestParameters().getALaCarte();
 
1054         requestHandlerUtils.parseRequest(sir, instanceIdMap, action, version, requestJSON, aLaCarte, requestId,
 
1056         requestHandlerUtils.setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
 
1057         String instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();
 
1059         requestHandlerUtils.checkForDuplicateRequests(action, instanceIdMap, requestScope, currentActiveReq,
 
1062         ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
 
1063         RequestReferences referencesResponse = new RequestReferences();
 
1064         referencesResponse.setRequestId(requestId);
 
1065         serviceResponse.setRequestReferences(referencesResponse);
 
1067         String orchestrationUri = env.getProperty(CommonConstants.ALACARTE_ORCHESTRATION);
 
1068         String timeOut = env.getProperty(CommonConstants.ALACARTE_RECIPE_TIMEOUT);
 
1070         if (StringUtils.isBlank(orchestrationUri) || StringUtils.isBlank(timeOut)) {
 
1071             String error = StringUtils.isBlank(orchestrationUri) ? "ALaCarte Orchestration URI not found in properties"
 
1072                     : "ALaCarte Recipe Timeout not found in properties";
 
1074             ErrorLoggerInfo errorLoggerInfo =
 
1075                     new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, ErrorCode.DataError)
 
1076                             .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
 
1078             ValidateException validateException = new ValidateException.Builder(error, HttpStatus.SC_NOT_FOUND,
 
1079                     ErrorNumbers.SVC_GENERAL_SERVICE_ERROR).errorInfo(errorLoggerInfo).build();
 
1081             requestHandlerUtils.updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
 
1083             throw validateException;
 
1087         serviceInstanceId = "";
 
1088         String configurationId = "";
 
1089         String pnfCorrelationId = "";
 
1091         if (sir.getServiceInstanceId() != null) {
 
1092             serviceInstanceId = sir.getServiceInstanceId();
 
1095         if (sir.getConfigurationId() != null) {
 
1096             configurationId = sir.getConfigurationId();
 
1099         pnfCorrelationId = getPnfCorrelationId(sir);
 
1102             infraActiveRequestsClient.save(currentActiveReq);
 
1103         } catch (Exception e) {
 
1104             ErrorLoggerInfo errorLoggerInfo =
 
1105                     new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, ErrorCode.DataError)
 
1106                             .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
 
1107             throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR,
 
1108                     ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e).errorInfo(errorLoggerInfo).build();
 
1111         if (!requestScope.equalsIgnoreCase(ModelType.service.name())) {
 
1113         } else if (aLaCarte == null) {
 
1116         RequestClientParameter requestClientParameter = null;
 
1118             requestClientParameter = new RequestClientParameter.Builder().setRequestId(requestId).setBaseVfModule(false)
 
1119                     .setRecipeTimeout(Integer.parseInt(timeOut)).setRequestAction(action.toString())
 
1120                     .setServiceInstanceId(serviceInstanceId).setPnfCorrelationId(pnfCorrelationId)
 
1121                     .setConfigurationId(configurationId)
 
1122                     .setRequestDetails(requestHandlerUtils.mapJSONtoMSOStyle(requestJSON, sir, aLaCarte, action))
 
1123                     .setApiVersion(apiVersion).setALaCarte(aLaCarte).setRequestUri(requestUri).build();
 
1124         } catch (IOException e) {
 
1125             ErrorLoggerInfo errorLoggerInfo =
 
1126                     new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, ErrorCode.SchemaError)
 
1127                             .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
 
1128             throw new ValidateException.Builder("Unable to generate RequestClientParamter object" + e.getMessage(),
 
1129                     HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER).errorInfo(errorLoggerInfo)
 
1133         return requestHandlerUtils.postBPELRequest(currentActiveReq, requestClientParameter, orchestrationUri,