d11ae75c69d4086689158973af6d724e09d05f52
[so.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
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  * Modifications Copyright (c) 2022 Ericsson. All rights reserved.
11  * ================================================================================
12  * Licensed under the Apache License, Version 2.0 (the "License");
13  * you may not use this file except in compliance with the License.
14  * You may obtain a copy of the License at
15  *
16  *      http://www.apache.org/licenses/LICENSE-2.0
17  *
18  * Unless required by applicable law or agreed to in writing, software
19  * distributed under the License is distributed on an "AS IS" BASIS,
20  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21  * See the License for the specific language governing permissions and
22  * limitations under the License.
23  * ============LICENSE_END=========================================================
24  */
25
26 package org.onap.so.apihandlerinfra;
27
28 import java.io.IOException;
29 import java.util.HashMap;
30 import java.util.Optional;
31 import java.util.stream.Collectors;
32 import javax.transaction.Transactional;
33 import javax.ws.rs.Consumes;
34 import javax.ws.rs.DELETE;
35 import javax.ws.rs.POST;
36 import javax.ws.rs.PUT;
37 import javax.ws.rs.Path;
38 import javax.ws.rs.PathParam;
39 import javax.ws.rs.Produces;
40 import javax.ws.rs.container.ContainerRequestContext;
41 import javax.ws.rs.core.Context;
42 import javax.ws.rs.core.MediaType;
43 import javax.ws.rs.core.Response;
44 import org.apache.commons.lang.StringUtils;
45 import org.apache.http.HttpStatus;
46 import org.onap.logging.filter.base.ErrorCode;
47 import org.onap.so.apihandler.common.CommonConstants;
48 import org.onap.so.apihandler.common.ErrorNumbers;
49 import org.onap.so.apihandler.common.RequestClientParameter;
50 import org.onap.so.apihandlerinfra.exceptions.ApiException;
51 import org.onap.so.apihandlerinfra.exceptions.RequestDbFailureException;
52 import org.onap.so.apihandlerinfra.exceptions.ValidateException;
53 import org.onap.so.apihandlerinfra.infra.rest.BpmnRequestBuilder;
54 import org.onap.so.apihandlerinfra.infra.rest.exception.CloudConfigurationNotFoundException;
55 import org.onap.so.apihandlerinfra.infra.rest.handler.AbstractRestHandler;
56 import org.onap.so.apihandlerinfra.infra.rest.validators.RequestValidatorListenerRunner;
57 import org.onap.so.apihandlerinfra.logging.ErrorLoggerInfo;
58 import org.onap.so.constants.Status;
59 import org.onap.so.db.catalog.client.CatalogDbClient;
60 import org.onap.so.db.request.beans.InfraActiveRequests;
61 import org.onap.so.db.request.client.RequestsDbClient;
62 import org.onap.so.exceptions.ValidationException;
63 import org.onap.so.logger.MessageEnum;
64 import org.onap.so.serviceinstancebeans.CloudConfiguration;
65 import org.onap.so.serviceinstancebeans.ModelInfo;
66 import org.onap.so.serviceinstancebeans.ModelType;
67 import org.onap.so.serviceinstancebeans.RequestDetails;
68 import org.onap.so.serviceinstancebeans.RequestReferences;
69 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
70 import org.onap.so.serviceinstancebeans.ServiceInstancesResponse;
71 import org.slf4j.Logger;
72 import org.slf4j.LoggerFactory;
73 import org.springframework.beans.factory.annotation.Autowired;
74 import org.springframework.core.env.Environment;
75 import org.springframework.stereotype.Component;
76 import org.springframework.web.client.RestTemplate;
77 import io.swagger.v3.oas.annotations.OpenAPIDefinition;
78 import io.swagger.v3.oas.annotations.Operation;
79 import io.swagger.v3.oas.annotations.info.Info;
80 import io.swagger.v3.oas.annotations.media.ArraySchema;
81 import io.swagger.v3.oas.annotations.media.Content;
82 import io.swagger.v3.oas.annotations.media.Schema;
83 import io.swagger.v3.oas.annotations.responses.ApiResponse;
84
85 @Component
86 @Path("/onap/so/infra/serviceInstantiation")
87 @OpenAPIDefinition(info = @Info(title = "/onap/so/infra/serviceInstantiation",
88         description = "Infrastructure API Requests for Service Instances"))
89 public class ServiceInstances extends AbstractRestHandler {
90
91     private static Logger logger = LoggerFactory.getLogger(MsoRequest.class);
92     private static String uriPrefix = "/serviceInstantiation/";
93     private static final String SAVE_TO_DB = "save instance to db";
94
95     @Autowired
96     private Environment env;
97
98     @Autowired
99     private RestTemplate restTemplate;
100
101     @Autowired
102     private CatalogDbClient catalogDbClient;
103
104     @Autowired
105     private RequestsDbClient infraActiveRequestsClient;
106
107     @Autowired
108     private MsoRequest msoRequest;
109
110     @Autowired
111     private RequestHandlerUtils requestHandlerUtils;
112
113     @Autowired
114     private RequestValidatorListenerRunner requestValidatorListenerRunner;
115
116     @Autowired
117     private BpmnRequestBuilder bpmnRequestBuilder;
118
119     @POST
120     @Path("/{version:[vV][5-7]}/serviceInstances")
121     @Consumes(MediaType.APPLICATION_JSON)
122     @Produces(MediaType.APPLICATION_JSON)
123     @Operation(description = "Create a Service Instance on a version provided",
124             responses = @ApiResponse(
125                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
126     @Transactional
127     public Response createServiceInstance(String request, @PathParam("version") String version,
128             @Context ContainerRequestContext requestContext) throws ApiException {
129         String requestId = requestHandlerUtils.getRequestId(requestContext);
130         return serviceInstances(request, Action.createInstance, null, version, requestId,
131                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
132     }
133
134     @POST
135     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/activate")
136     @Consumes(MediaType.APPLICATION_JSON)
137     @Produces(MediaType.APPLICATION_JSON)
138     @Operation(description = "Activate provided Service Instance",
139             responses = @ApiResponse(
140                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
141     @Transactional
142     public Response activateServiceInstance(String request, @PathParam("version") String version,
143             @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
144             throws ApiException {
145         String requestId = requestHandlerUtils.getRequestId(requestContext);
146         HashMap<String, String> instanceIdMap = new HashMap<>();
147         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
148         return serviceInstances(request, Action.activateInstance, instanceIdMap, version, requestId,
149                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
150     }
151
152     @POST
153     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/deactivate")
154     @Consumes(MediaType.APPLICATION_JSON)
155     @Produces(MediaType.APPLICATION_JSON)
156     @Operation(description = "Deactivate provided Service Instance",
157             responses = @ApiResponse(
158                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
159     @Transactional
160     public Response deactivateServiceInstance(String request, @PathParam("version") String version,
161             @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
162             throws ApiException {
163         String requestId = requestHandlerUtils.getRequestId(requestContext);
164         HashMap<String, String> instanceIdMap = new HashMap<>();
165         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
166         return serviceInstances(request, Action.deactivateInstance, instanceIdMap, version, requestId,
167                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
168     }
169
170     @DELETE
171     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}")
172     @Consumes(MediaType.APPLICATION_JSON)
173     @Produces(MediaType.APPLICATION_JSON)
174     @Operation(description = "Delete provided Service Instance",
175             responses = @ApiResponse(
176                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
177     @Transactional
178     public Response deleteServiceInstance(String request, @PathParam("version") String version,
179             @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
180             throws ApiException {
181         String requestId = requestHandlerUtils.getRequestId(requestContext);
182         HashMap<String, String> instanceIdMap = new HashMap<>();
183         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
184         return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
185                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
186     }
187
188     @POST
189     @Path("/{version:[vV][7]}/serviceInstances/assign")
190     @Consumes(MediaType.APPLICATION_JSON)
191     @Produces(MediaType.APPLICATION_JSON)
192     @Operation(description = "Assign Service Instance",
193             responses = @ApiResponse(
194                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
195     @Transactional
196     public Response assignServiceInstance(String request, @PathParam("version") String version,
197             @Context ContainerRequestContext requestContext) throws ApiException {
198         String requestId = requestHandlerUtils.getRequestId(requestContext);
199         return serviceInstances(request, Action.assignInstance, null, version, requestId,
200                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
201     }
202
203     @POST
204     @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/unassign")
205     @Consumes(MediaType.APPLICATION_JSON)
206     @Produces(MediaType.APPLICATION_JSON)
207     @Operation(description = "Unassign Service Instance",
208             responses = @ApiResponse(
209                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
210     @Transactional
211     public Response unassignServiceInstance(String request, @PathParam("version") String version,
212             @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
213             throws ApiException {
214         String requestId = requestHandlerUtils.getRequestId(requestContext);
215         HashMap<String, String> instanceIdMap = new HashMap<>();
216         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
217         return serviceInstances(request, Action.unassignInstance, instanceIdMap, version, requestId,
218                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
219     }
220
221     @POST
222     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations")
223     @Consumes(MediaType.APPLICATION_JSON)
224     @Produces(MediaType.APPLICATION_JSON)
225     @Operation(description = "Create Port Mirroring Configuration",
226             responses = @ApiResponse(
227                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
228     @Transactional
229     public Response createPortConfiguration(String request, @PathParam("version") String version,
230             @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
231             throws ApiException {
232         String requestId = requestHandlerUtils.getRequestId(requestContext);
233         HashMap<String, String> instanceIdMap = new HashMap<>();
234         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
235         return configurationRecipeLookup(request, Action.createInstance, instanceIdMap, version, requestId,
236                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
237     }
238
239     @DELETE
240     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}")
241     @Consumes(MediaType.APPLICATION_JSON)
242     @Produces(MediaType.APPLICATION_JSON)
243     @Operation(description = "Delete provided Port",
244             responses = @ApiResponse(
245                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
246     @Transactional
247     public Response deletePortConfiguration(String request, @PathParam("version") String version,
248             @PathParam("serviceInstanceId") String serviceInstanceId,
249             @PathParam("configurationInstanceId") String configurationInstanceId,
250             @Context ContainerRequestContext requestContext) throws ApiException {
251         String requestId = requestHandlerUtils.getRequestId(requestContext);
252         HashMap<String, String> instanceIdMap = new HashMap<>();
253         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
254         instanceIdMap.put("configurationInstanceId", configurationInstanceId);
255         return configurationRecipeLookup(request, Action.deleteInstance, instanceIdMap, version, requestId,
256                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
257     }
258
259     @POST
260     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/enablePort")
261     @Consumes(MediaType.APPLICATION_JSON)
262     @Produces(MediaType.APPLICATION_JSON)
263     @Operation(description = "Enable Port Mirroring",
264             responses = @ApiResponse(
265                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
266     @Transactional
267     public Response enablePort(String request, @PathParam("version") String version,
268             @PathParam("serviceInstanceId") String serviceInstanceId,
269             @PathParam("configurationInstanceId") String configurationInstanceId,
270             @Context ContainerRequestContext requestContext) throws ApiException {
271         String requestId = requestHandlerUtils.getRequestId(requestContext);
272         HashMap<String, String> instanceIdMap = new HashMap<>();
273         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
274         instanceIdMap.put("configurationInstanceId", configurationInstanceId);
275         return configurationRecipeLookup(request, Action.enablePort, instanceIdMap, version, requestId,
276                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
277     }
278
279     @POST
280     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/disablePort")
281     @Consumes(MediaType.APPLICATION_JSON)
282     @Produces(MediaType.APPLICATION_JSON)
283     @Operation(description = "Disable Port Mirroring",
284             responses = @ApiResponse(
285                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
286     @Transactional
287     public Response disablePort(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.disablePort, instanceIdMap, version, requestId,
296                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
297     }
298
299     @POST
300     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/activate")
301     @Consumes(MediaType.APPLICATION_JSON)
302     @Produces(MediaType.APPLICATION_JSON)
303     @Operation(description = "Activate Port Mirroring",
304             responses = @ApiResponse(
305                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
306     @Transactional
307     public Response activatePort(String request, @PathParam("version") String version,
308             @PathParam("serviceInstanceId") String serviceInstanceId,
309             @PathParam("configurationInstanceId") String configurationInstanceId,
310             @Context ContainerRequestContext requestContext) throws ApiException {
311         String requestId = requestHandlerUtils.getRequestId(requestContext);
312         HashMap<String, String> instanceIdMap = new HashMap<>();
313         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
314         instanceIdMap.put("configurationInstanceId", configurationInstanceId);
315         return configurationRecipeLookup(request, Action.activateInstance, instanceIdMap, version, requestId,
316                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
317     }
318
319     @POST
320     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/deactivate")
321     @Consumes(MediaType.APPLICATION_JSON)
322     @Produces(MediaType.APPLICATION_JSON)
323     @Operation(description = "Deactivate Port Mirroring",
324             responses = @ApiResponse(
325                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
326     @Transactional
327     public Response deactivatePort(String request, @PathParam("version") String version,
328             @PathParam("serviceInstanceId") String serviceInstanceId,
329             @PathParam("configurationInstanceId") String configurationInstanceId,
330             @Context ContainerRequestContext requestContext) throws ApiException {
331         String requestId = requestHandlerUtils.getRequestId(requestContext);
332         HashMap<String, String> instanceIdMap = new HashMap<>();
333         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
334         instanceIdMap.put("configurationInstanceId", configurationInstanceId);
335         return configurationRecipeLookup(request, Action.deactivateInstance, instanceIdMap, version, requestId,
336                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
337     }
338
339     @POST
340     @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/addRelationships")
341     @Consumes(MediaType.APPLICATION_JSON)
342     @Produces(MediaType.APPLICATION_JSON)
343     @Operation(description = "Add Relationships to a Service Instance",
344             responses = @ApiResponse(
345                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
346     @Transactional
347     public Response addRelationships(String request, @PathParam("version") String version,
348             @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
349             throws ApiException {
350         String requestId = requestHandlerUtils.getRequestId(requestContext);
351         HashMap<String, String> instanceIdMap = new HashMap<>();
352         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
353         return configurationRecipeLookup(request, Action.addRelationships, instanceIdMap, version, requestId,
354                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
355     }
356
357     @POST
358     @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/removeRelationships")
359     @Consumes(MediaType.APPLICATION_JSON)
360     @Produces(MediaType.APPLICATION_JSON)
361     @Operation(description = "Remove Relationships from Service Instance",
362             responses = @ApiResponse(
363                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
364     @Transactional
365     public Response removeRelationships(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);
371         return configurationRecipeLookup(request, Action.removeRelationships, instanceIdMap, version, requestId,
372                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
373     }
374
375     @POST
376     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs")
377     @Consumes(MediaType.APPLICATION_JSON)
378     @Produces(MediaType.APPLICATION_JSON)
379     @Operation(description = "Create VNF on a specified version and serviceInstance",
380             responses = @ApiResponse(
381                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
382     @Transactional
383     public Response createVnfInstance(String request, @PathParam("version") String version,
384             @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
385             throws ApiException {
386         String requestId = requestHandlerUtils.getRequestId(requestContext);
387         HashMap<String, String> instanceIdMap = new HashMap<>();
388         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
389         try {
390             return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
391                     requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
392         } catch (Exception e) {
393             logger.error("Error in vnf", e);
394             throw e;
395         }
396     }
397
398     @POST
399     @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/cnfs")
400     @Consumes(MediaType.APPLICATION_JSON)
401     @Produces(MediaType.APPLICATION_JSON)
402     @Operation(description = "Create CNF on a specified version and serviceInstance",
403             responses = @ApiResponse(
404                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
405     @Transactional
406     public Response createCnfInstance(String request, @PathParam("version") String version,
407             @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
408             throws ApiException {
409         String requestId = requestHandlerUtils.getRequestId(requestContext);
410         HashMap<String, String> instanceIdMap = new HashMap<>();
411         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
412         try {
413             return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
414                     requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
415         } catch (Exception e) {
416             logger.error("Error in cnf", e);
417             throw e;
418         }
419     }
420
421     @DELETE
422     @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/cnfs/{asInstanceId}")
423     @Consumes(MediaType.APPLICATION_JSON)
424     @Produces(MediaType.APPLICATION_JSON)
425     @Operation(description = "Delete provided for CNF instance",
426             responses = @ApiResponse(
427                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
428     @Transactional
429     public Response deleteCnfInstance(String request, @PathParam("version") String version,
430             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("asInstanceId") String asInstanceId,
431             @Context ContainerRequestContext requestContext) throws ApiException {
432         logger.debug("Inside API Handler to perform delete CNF Instance");
433         String requestId = requestHandlerUtils.getRequestId(requestContext);
434         HashMap<String, String> instanceIdMap = new HashMap<>();
435         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
436         instanceIdMap.put("asInstanceId", asInstanceId);
437         return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
438                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
439     }
440
441     @POST
442     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/upgrade")
443     @Consumes(MediaType.APPLICATION_JSON)
444     @Produces(MediaType.APPLICATION_JSON)
445     @Operation(description = "Upgrade a Service Instance to newer model",
446             responses = @ApiResponse(
447                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
448     @Transactional
449     public Response upgradeServiceInstance(String request, @PathParam("version") String version,
450             @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
451             throws ApiException {
452         String requestId = requestHandlerUtils.getRequestId(requestContext);
453         HashMap<String, String> instanceIdMap = new HashMap<>();
454         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
455
456         return serviceInstances(request, Action.upgradeInstance, instanceIdMap, version, requestId,
457                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
458     }
459
460     @POST
461     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/replace")
462     @Consumes(MediaType.APPLICATION_JSON)
463     @Produces(MediaType.APPLICATION_JSON)
464     @Operation(description = "Replace provided VNF instance",
465             responses = @ApiResponse(
466                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
467     @Transactional
468     public Response replaceVnfInstance(String request, @PathParam("version") String version,
469             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
470             @Context ContainerRequestContext requestContext) throws ApiException {
471         String requestId = requestHandlerUtils.getRequestId(requestContext);
472         HashMap<String, String> instanceIdMap = new HashMap<>();
473         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
474         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
475         return serviceInstances(request, Action.replaceInstance, instanceIdMap, version, requestId,
476                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
477     }
478
479     @POST
480     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/healthcheck")
481     @Consumes(MediaType.APPLICATION_JSON)
482     @Produces(MediaType.APPLICATION_JSON)
483     @Operation(description = "HealthCheck for provided VNF instance",
484             responses = @ApiResponse(
485                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
486     @Transactional
487     public Response cnfHealthCheck(String request, @PathParam("version") String version,
488             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
489             @Context ContainerRequestContext requestContext) throws ApiException {
490         String requestId = requestHandlerUtils.getRequestId(requestContext);
491         HashMap<String, String> instanceIdMap = new HashMap<>();
492         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
493         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
494         return serviceInstances(request, Action.healthCheck, instanceIdMap, version, requestId,
495                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
496     }
497
498     @POST
499     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/upgradeCnf")
500     @Consumes(MediaType.APPLICATION_JSON)
501     @Produces(MediaType.APPLICATION_JSON)
502     @Operation(description = "Upgrade CNF instance",
503             responses = @ApiResponse(
504                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
505     @Transactional
506     public Response cnfUpgrade(String request, @PathParam("version") String version,
507             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
508             @Context ContainerRequestContext requestContext) throws ApiException {
509         String requestId = requestHandlerUtils.getRequestId(requestContext);
510         HashMap<String, String> instanceIdMap = new HashMap<>();
511         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
512         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
513         return serviceInstances(request, Action.upgradeCnf, instanceIdMap, version, requestId,
514                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
515     }
516
517     @PUT
518     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}")
519     @Consumes(MediaType.APPLICATION_JSON)
520     @Produces(MediaType.APPLICATION_JSON)
521     @Operation(description = "Update VNF on a specified version, serviceInstance and vnfInstance",
522             responses = @ApiResponse(
523                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
524     @Transactional
525     public Response updateVnfInstance(String request, @PathParam("version") String version,
526             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
527             @Context ContainerRequestContext requestContext) throws ApiException {
528         String requestId = requestHandlerUtils.getRequestId(requestContext);
529         HashMap<String, String> instanceIdMap = new HashMap<>();
530         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
531         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
532         return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
533                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
534     }
535
536     @POST
537     @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/applyUpdatedConfig")
538     @Consumes(MediaType.APPLICATION_JSON)
539     @Produces(MediaType.APPLICATION_JSON)
540     @Operation(description = "Apply updated configuration", responses = @ApiResponse(
541             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
542     public Response applyUpdatedConfig(String request, @PathParam("version") String version,
543             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
544             @Context ContainerRequestContext requestContext) throws ApiException {
545         String requestId = requestHandlerUtils.getRequestId(requestContext);
546         HashMap<String, String> instanceIdMap = new HashMap<>();
547         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
548         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
549         return serviceInstances(request, Action.applyUpdatedConfig, instanceIdMap, version, requestId,
550                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
551     }
552
553     @POST
554     @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/recreate")
555     @Consumes(MediaType.APPLICATION_JSON)
556     @Produces(MediaType.APPLICATION_JSON)
557     @Operation(description = "Recreate VNF Instance", responses = @ApiResponse(
558             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
559     public Response recreateVnfInstance(String request, @PathParam("version") String version,
560             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
561             @Context ContainerRequestContext requestContext) throws ApiException {
562         String requestId = requestHandlerUtils.getRequestId(requestContext);
563         HashMap<String, String> instanceIdMap = new HashMap<>();
564         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
565         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
566         return serviceInstances(request, Action.recreateInstance, instanceIdMap, version, requestId,
567                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
568     }
569
570     @DELETE
571     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}")
572     @Consumes(MediaType.APPLICATION_JSON)
573     @Produces(MediaType.APPLICATION_JSON)
574     @Operation(description = "Delete provided VNF instance",
575             responses = @ApiResponse(
576                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
577     @Transactional
578     public Response deleteVnfInstance(String request, @PathParam("version") String version,
579             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
580             @Context ContainerRequestContext requestContext) throws ApiException {
581         String requestId = requestHandlerUtils.getRequestId(requestContext);
582         HashMap<String, String> instanceIdMap = new HashMap<>();
583         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
584         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
585         return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
586                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
587     }
588
589     @POST
590     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules")
591     @Consumes(MediaType.APPLICATION_JSON)
592     @Produces(MediaType.APPLICATION_JSON)
593     @Operation(description = "Create VfModule on a specified version, serviceInstance and vnfInstance",
594             responses = @ApiResponse(
595                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
596     @Transactional
597     public Response createVfModuleInstance(String request, @PathParam("version") String version,
598             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
599             @Context ContainerRequestContext requestContext) throws ApiException {
600         String requestId = requestHandlerUtils.getRequestId(requestContext);
601         HashMap<String, String> instanceIdMap = new HashMap<>();
602         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
603         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
604         return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
605                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
606     }
607
608     @POST
609     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/replace")
610     @Consumes(MediaType.APPLICATION_JSON)
611     @Produces(MediaType.APPLICATION_JSON)
612     @Operation(description = "Create VfModule on a specified version, serviceInstance and vnfInstance",
613             responses = @ApiResponse(
614                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
615     @Transactional
616     public Response replaceVfModuleInstance(String request, @PathParam("version") String version,
617             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
618             @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
619             throws ApiException {
620         String requestId = requestHandlerUtils.getRequestId(requestContext);
621         HashMap<String, String> instanceIdMap = new HashMap<>();
622         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
623         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
624         instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
625         return serviceInstances(request, Action.replaceInstance, instanceIdMap, version, requestId,
626                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
627     }
628
629     @PUT
630     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}")
631     @Consumes(MediaType.APPLICATION_JSON)
632     @Produces(MediaType.APPLICATION_JSON)
633     @Operation(description = "Update VfModule on a specified version, serviceInstance, vnfInstance and vfModule",
634             responses = @ApiResponse(
635                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
636     @Transactional
637     public Response updateVfModuleInstance(String request, @PathParam("version") String version,
638             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
639             @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
640             throws ApiException {
641         String requestId = requestHandlerUtils.getRequestId(requestContext);
642         HashMap<String, String> instanceIdMap = new HashMap<>();
643         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
644         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
645         instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
646         return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
647                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
648     }
649
650     @POST
651     @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/inPlaceSoftwareUpdate")
652     @Consumes(MediaType.APPLICATION_JSON)
653     @Produces(MediaType.APPLICATION_JSON)
654     @Operation(description = "Perform VNF software update",
655             responses = @ApiResponse(
656                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
657     @Transactional
658     public Response inPlaceSoftwareUpdate(String request, @PathParam("version") String version,
659             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
660             @Context ContainerRequestContext requestContext) throws ApiException {
661         String requestId = requestHandlerUtils.getRequestId(requestContext);
662         HashMap<String, String> instanceIdMap = new HashMap<>();
663         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
664         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
665         return serviceInstances(request, Action.inPlaceSoftwareUpdate, instanceIdMap, version, requestId,
666                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
667     }
668
669     @DELETE
670     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}")
671     @Consumes(MediaType.APPLICATION_JSON)
672     @Produces(MediaType.APPLICATION_JSON)
673     @Operation(description = "Delete provided VfModule instance",
674             responses = @ApiResponse(
675                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
676     @Transactional
677     public Response deleteVfModuleInstance(String request, @PathParam("version") String version,
678             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
679             @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
680             throws ApiException {
681         String requestId = requestHandlerUtils.getRequestId(requestContext);
682         HashMap<String, String> instanceIdMap = new HashMap<>();
683         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
684         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
685         instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
686         return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
687                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
688     }
689
690     @POST
691     @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/deactivateAndCloudDelete")
692     @Consumes(MediaType.APPLICATION_JSON)
693     @Produces(MediaType.APPLICATION_JSON)
694     @Operation(description = "Deactivate and Cloud Delete VfModule instance",
695             responses = @ApiResponse(
696                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
697     @Transactional
698     public Response deactivateAndCloudDeleteVfModuleInstance(String request, @PathParam("version") String version,
699             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
700             @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
701             throws ApiException {
702         String requestId = requestHandlerUtils.getRequestId(requestContext);
703         HashMap<String, String> instanceIdMap = new HashMap<>();
704         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
705         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
706         instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
707         Response response = serviceInstances(request, Action.deactivateAndCloudDelete, instanceIdMap, version,
708                 requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
709         return response;
710     }
711
712     @POST
713     @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/scaleOut")
714     @Consumes(MediaType.APPLICATION_JSON)
715     @Produces(MediaType.APPLICATION_JSON)
716     @Operation(description = "VF Auto Scale Out",
717             responses = @ApiResponse(
718                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
719     @Transactional
720     public Response scaleOutVfModule(String request, @PathParam("version") String version,
721             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
722             @Context ContainerRequestContext requestContext) throws ApiException {
723         String requestId = requestHandlerUtils.getRequestId(requestContext);
724         HashMap<String, String> instanceIdMap = new HashMap<>();
725         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
726         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
727         return serviceInstances(request, Action.scaleOut, instanceIdMap, version, requestId,
728                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
729     }
730
731     @POST
732     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups")
733     @Consumes(MediaType.APPLICATION_JSON)
734     @Produces(MediaType.APPLICATION_JSON)
735     @Operation(description = "Create VolumeGroup on a specified version, serviceInstance, vnfInstance",
736             responses = @ApiResponse(
737                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
738     @Transactional
739     public Response createVolumeGroupInstance(String request, @PathParam("version") String version,
740             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
741             @Context ContainerRequestContext requestContext) throws ApiException {
742         String requestId = requestHandlerUtils.getRequestId(requestContext);
743         HashMap<String, String> instanceIdMap = new HashMap<>();
744         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
745         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
746         return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
747                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
748     }
749
750     @PUT
751     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}")
752     @Consumes(MediaType.APPLICATION_JSON)
753     @Produces(MediaType.APPLICATION_JSON)
754     @Operation(description = "Update VolumeGroup on a specified version, serviceInstance, vnfInstance and volumeGroup",
755             responses = @ApiResponse(
756                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
757     @Transactional
758     public Response updateVolumeGroupInstance(String request, @PathParam("version") String version,
759             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
760             @PathParam("volumeGroupInstanceId") String volumeGroupInstanceId,
761             @Context ContainerRequestContext requestContext) throws ApiException {
762         String requestId = requestHandlerUtils.getRequestId(requestContext);
763         HashMap<String, String> instanceIdMap = new HashMap<>();
764         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
765         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
766         instanceIdMap.put("volumeGroupInstanceId", volumeGroupInstanceId);
767         return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
768                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
769     }
770
771     @DELETE
772     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}")
773     @Consumes(MediaType.APPLICATION_JSON)
774     @Produces(MediaType.APPLICATION_JSON)
775     @Operation(description = "Delete provided VolumeGroup instance",
776             responses = @ApiResponse(
777                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
778     @Transactional
779     public Response deleteVolumeGroupInstance(String request, @PathParam("version") String version,
780             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
781             @PathParam("volumeGroupInstanceId") String volumeGroupInstanceId,
782             @Context ContainerRequestContext requestContext) throws ApiException {
783         String requestId = requestHandlerUtils.getRequestId(requestContext);
784         HashMap<String, String> instanceIdMap = new HashMap<>();
785         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
786         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
787         instanceIdMap.put("volumeGroupInstanceId", volumeGroupInstanceId);
788         return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
789                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
790     }
791
792     @POST
793     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks")
794     @Consumes(MediaType.APPLICATION_JSON)
795     @Produces(MediaType.APPLICATION_JSON)
796     @Operation(description = "Create NetworkInstance on a specified version and serviceInstance ",
797             responses = @ApiResponse(
798                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
799     @Transactional
800     public Response createNetworkInstance(String request, @PathParam("version") String version,
801             @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
802             throws ApiException {
803         String requestId = requestHandlerUtils.getRequestId(requestContext);
804         HashMap<String, String> instanceIdMap = new HashMap<>();
805         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
806         return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
807                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
808     }
809
810     @PUT
811     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks/{networkInstanceId}")
812     @Consumes(MediaType.APPLICATION_JSON)
813     @Produces(MediaType.APPLICATION_JSON)
814     @Operation(description = "Update VolumeGroup on a specified version, serviceInstance, networkInstance",
815             responses = @ApiResponse(
816                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
817     @Transactional
818     public Response updateNetworkInstance(String request, @PathParam("version") String version,
819             @PathParam("serviceInstanceId") String serviceInstanceId,
820             @PathParam("networkInstanceId") String networkInstanceId, @Context ContainerRequestContext requestContext)
821             throws ApiException {
822         String requestId = requestHandlerUtils.getRequestId(requestContext);
823         HashMap<String, String> instanceIdMap = new HashMap<>();
824         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
825         instanceIdMap.put("networkInstanceId", networkInstanceId);
826         return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
827                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
828     }
829
830     @DELETE
831     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks/{networkInstanceId}")
832     @Consumes(MediaType.APPLICATION_JSON)
833     @Produces(MediaType.APPLICATION_JSON)
834     @Operation(description = "Delete provided Network instance",
835             responses = @ApiResponse(
836                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
837     @Transactional
838     public Response deleteNetworkInstance(String request, @PathParam("version") String version,
839             @PathParam("serviceInstanceId") String serviceInstanceId,
840             @PathParam("networkInstanceId") String networkInstanceId, @Context ContainerRequestContext requestContext)
841             throws ApiException {
842         String requestId = requestHandlerUtils.getRequestId(requestContext);
843         HashMap<String, String> instanceIdMap = new HashMap<>();
844         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
845         instanceIdMap.put("networkInstanceId", networkInstanceId);
846         return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
847                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
848     }
849
850     @POST
851     @Path("/{version:[vV][7]}/instanceGroups")
852     @Consumes(MediaType.APPLICATION_JSON)
853     @Produces(MediaType.APPLICATION_JSON)
854     @Operation(description = "Create instanceGroups",
855             responses = @ApiResponse(
856                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
857     @Transactional
858     public Response createInstanceGroups(String request, @PathParam("version") String version,
859             @Context ContainerRequestContext requestContext) throws ApiException {
860         String requestId = requestHandlerUtils.getRequestId(requestContext);
861         return serviceInstances(request, Action.createInstance, null, version, requestId,
862                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
863     }
864
865     @DELETE
866     @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}")
867     @Consumes(MediaType.APPLICATION_JSON)
868     @Produces(MediaType.APPLICATION_JSON)
869     @Operation(description = "Delete instanceGroup",
870             responses = @ApiResponse(
871                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
872     @Transactional
873     public Response deleteInstanceGroups(@PathParam("version") String version,
874             @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext)
875             throws ApiException {
876         String requestId = requestHandlerUtils.getRequestId(requestContext);
877         HashMap<String, String> instanceIdMap = new HashMap<>();
878         instanceIdMap.put(CommonConstants.INSTANCE_GROUP_INSTANCE_ID, instanceGroupId);
879         return deleteInstanceGroups(Action.deleteInstance, instanceIdMap, version, requestId,
880                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix), requestContext);
881     }
882
883     @POST
884     @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}/addMembers")
885     @Consumes(MediaType.APPLICATION_JSON)
886     @Produces(MediaType.APPLICATION_JSON)
887     @Operation(description = "Add instanceGroup members",
888             responses = @ApiResponse(
889                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
890     @Transactional
891     public Response addInstanceGroupMembers(String request, @PathParam("version") String version,
892             @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext)
893             throws ApiException {
894         String requestId = requestHandlerUtils.getRequestId(requestContext);
895         HashMap<String, String> instanceIdMap = new HashMap<>();
896         instanceIdMap.put(CommonConstants.INSTANCE_GROUP_INSTANCE_ID, instanceGroupId);
897         return serviceInstances(request, Action.addMembers, instanceIdMap, version, requestId,
898                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
899     }
900
901     @POST
902     @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}/removeMembers")
903     @Consumes(MediaType.APPLICATION_JSON)
904     @Produces(MediaType.APPLICATION_JSON)
905     @Operation(description = "Remove instanceGroup members",
906             responses = @ApiResponse(
907                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
908     @Transactional
909     public Response removeInstanceGroupMembers(String request, @PathParam("version") String version,
910             @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext)
911             throws ApiException {
912         String requestId = requestHandlerUtils.getRequestId(requestContext);
913         HashMap<String, String> instanceIdMap = new HashMap<>();
914         instanceIdMap.put(CommonConstants.INSTANCE_GROUP_INSTANCE_ID, instanceGroupId);
915         return serviceInstances(request, Action.removeMembers, instanceIdMap, version, requestId,
916                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
917     }
918
919     /**
920      * This method is used for POST a request to the BPEL client (BPMN).
921      *
922      * Convert the requestJson to ServiceInstanceRequest(sir), create the msoRequest object, check whether this request
923      * is already being processed in requestdb for duplicate check.
924      *
925      * Based on the alacarte flag, sir and msoRequest will do the recipe lookup from the service and servicerecipe table
926      * of catalogdb, and get the OrchestrationURI.
927      *
928      * If the present request is not the duplicate request then this request will be saved in the requestdb. and will
929      * POST a request to the BPMN engine at the OrchestrationURI fetched.
930      *
931      * @param requestJSON Json fetched as body in the API call
932      * @param action Type of action to be performed
933      * @param instanceIdMap Map of instance ids of service/vnf/vf/configuration etc..
934      * @param version Supported version of API
935      * @param requestId Unique id for the request
936      * @param requestUri
937      * @return response object
938      * @throws ApiException
939      */
940     public Response serviceInstances(String requestJSON, Actions action, HashMap<String, String> instanceIdMap,
941             String version, String requestId, String requestUri) throws ApiException {
942         return serviceInstances(requestJSON, action, instanceIdMap, version, requestId, requestUri, null);
943
944     }
945
946     public Response serviceInstances(String requestJSON, Actions action, HashMap<String, String> instanceIdMap,
947             String version, String requestId, String requestUri, HashMap<String, String> queryParams)
948             throws ApiException {
949         String serviceInstanceId;
950         Boolean aLaCarte = null;
951         ServiceInstancesRequest sir;
952         String apiVersion = version.substring(1);
953
954         sir = requestHandlerUtils.convertJsonToServiceInstanceRequest(requestJSON, action, requestId, requestUri);
955         action = handleReplaceInstance(action, sir);
956
957         String requestScope = requestHandlerUtils.deriveRequestScope(action, sir, requestUri);
958         try {
959             requestValidatorListenerRunner.runValidations(requestUri, instanceIdMap, sir, queryParams, action);
960         } catch (ApiException e) {
961             msoRequest.createErrorRequestRecord(Status.FAILED, requestId, e.getMessage(), action, requestScope,
962                     requestJSON, requestHandlerUtils
963                             .getServiceInstanceIdForValidationError(sir, instanceIdMap, requestScope).orElse(null),
964                     sir);
965             throw e;
966         }
967
968         InfraActiveRequests currentActiveReq =
969                 msoRequest.createRequestObject(sir, action, requestId, Status.IN_PROGRESS, requestJSON, requestScope);
970         if (sir.getRequestDetails().getRequestParameters() != null) {
971             aLaCarte = sir.getRequestDetails().getRequestParameters().getALaCarte();
972         }
973
974         requestHandlerUtils.parseRequest(sir, instanceIdMap, action, version, requestJSON, aLaCarte, requestId,
975                 currentActiveReq);
976         if ((action == Action.replaceInstance || action == Action.replaceInstanceRetainAssignments)
977                 && (requestScope.equals(ModelType.vnf.toString()) || requestScope.equals(ModelType.vfModule.toString())
978                         || requestScope.equals(ModelType.cnf.toString()))
979                 && sir.getRequestDetails().getCloudConfiguration() == null) {
980             CloudConfiguration cloudConfiguration =
981                     getCloudConfigurationOnReplace(requestScope, instanceIdMap, currentActiveReq);
982             sir.getRequestDetails().setCloudConfiguration(cloudConfiguration);
983             setCloudConfigurationCurrentActiveRequest(cloudConfiguration, currentActiveReq);
984         }
985         requestHandlerUtils.setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
986
987         String instanceName = null;
988         if (sir.getRequestDetails().getRequestInfo() != null) {
989             instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();
990         }
991         boolean alaCarteFlag = msoRequest.getAlacarteFlag(sir);
992         String vnfType = msoRequest.getVnfType(sir, requestScope);
993         String networkType = msoRequest.getNetworkType(sir, requestScope);
994         String sdcServiceModelVersion = msoRequest.getSDCServiceModelVersion(sir);
995         String vfModuleType = msoRequest.getVfModuleType(sir, requestScope);
996
997         if (requestScope.equalsIgnoreCase(ModelType.vnf.name()) && vnfType != null) {
998             currentActiveReq.setVnfType(vnfType);
999         } else if (requestScope.equalsIgnoreCase(ModelType.network.name()) && networkType != null) {
1000             currentActiveReq.setNetworkType(networkType);
1001         }
1002
1003         requestHandlerUtils.checkForDuplicateRequests(action, instanceIdMap, requestScope, currentActiveReq,
1004                 instanceName);
1005
1006         ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
1007
1008         RequestReferences referencesResponse = new RequestReferences();
1009
1010         referencesResponse.setRequestId(requestId);
1011
1012         serviceResponse.setRequestReferences(referencesResponse);
1013         RecipeLookupResult recipeLookupResult =
1014                 requestHandlerUtils.getServiceInstanceOrchestrationURI(sir, action, alaCarteFlag, currentActiveReq);
1015         String serviceInstanceType = requestHandlerUtils.getServiceType(requestScope, sir, alaCarteFlag);
1016
1017         ModelInfo modelInfo = sir.getRequestDetails().getModelInfo();
1018         ModelType modelType = requestHandlerUtils.getModelType(action, modelInfo);
1019
1020         Boolean isBaseVfModule = false;
1021
1022         if (modelType.equals(ModelType.vfModule)) {
1023             isBaseVfModule = requestHandlerUtils.getIsBaseVfModule(modelInfo, action, vnfType, sdcServiceModelVersion,
1024                     currentActiveReq);
1025         }
1026
1027         serviceInstanceId = requestHandlerUtils.setServiceInstanceId(requestScope, sir);
1028         String vnfId = "";
1029         String vfModuleId = "";
1030         String volumeGroupId = "";
1031         String networkId = "";
1032         String pnfCorrelationId = "";
1033         String instanceGroupId = null;
1034
1035         if (sir.getVnfInstanceId() != null) {
1036             vnfId = sir.getVnfInstanceId();
1037         }
1038
1039         if (sir.getVfModuleInstanceId() != null) {
1040             vfModuleId = sir.getVfModuleInstanceId();
1041         }
1042
1043         if (sir.getVolumeGroupInstanceId() != null) {
1044             volumeGroupId = sir.getVolumeGroupInstanceId();
1045         }
1046
1047         if (sir.getNetworkInstanceId() != null) {
1048             networkId = sir.getNetworkInstanceId();
1049         }
1050         if (sir.getInstanceGroupId() != null) {
1051             instanceGroupId = sir.getInstanceGroupId();
1052         }
1053
1054         pnfCorrelationId = getPnfCorrelationId(sir);
1055
1056         try {
1057             infraActiveRequestsClient.save(currentActiveReq);
1058         } catch (Exception e) {
1059             logger.error("Exception occurred", e);
1060             ErrorLoggerInfo errorLoggerInfo =
1061                     new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, ErrorCode.DataError)
1062                             .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1063             throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR,
1064                     ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e).errorInfo(errorLoggerInfo).build();
1065         }
1066
1067         if (!requestScope.equalsIgnoreCase(ModelType.service.name()) && action != Action.recreateInstance
1068                 && !requestScope.equalsIgnoreCase(ModelType.vnf.name())) {
1069             aLaCarte = true;
1070         } else if (aLaCarte == null) {
1071             aLaCarte = false;
1072         }
1073
1074
1075         RequestClientParameter requestClientParameter;
1076         try {
1077             requestClientParameter = new RequestClientParameter.Builder().setRequestId(requestId)
1078                     .setBaseVfModule(isBaseVfModule).setRecipeTimeout(recipeLookupResult.getRecipeTimeout())
1079                     .setRequestAction(action.toString()).setServiceInstanceId(serviceInstanceId)
1080                     .setPnfCorrelationId(pnfCorrelationId).setVnfId(vnfId).setVfModuleId(vfModuleId)
1081                     .setVolumeGroupId(volumeGroupId).setNetworkId(networkId).setServiceType(serviceInstanceType)
1082                     .setVnfType(vnfType).setVfModuleType(vfModuleType).setNetworkType(networkType)
1083                     .setRequestDetails(requestHandlerUtils.mapJSONtoMSOStyle(requestJSON, sir, aLaCarte, action))
1084                     .setApiVersion(apiVersion).setALaCarte(aLaCarte).setRequestUri(requestUri)
1085                     .setInstanceGroupId(instanceGroupId).build();
1086         } catch (IOException e) {
1087             logger.error("Exception occurred", e);
1088             ErrorLoggerInfo errorLoggerInfo =
1089                     new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, ErrorCode.SchemaError)
1090                             .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1091             throw new ValidateException.Builder("Unable to generate RequestClientParamter object" + e.getMessage(),
1092                     HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER).errorInfo(errorLoggerInfo)
1093                             .build();
1094         }
1095         return requestHandlerUtils.postBPELRequest(currentActiveReq, requestClientParameter,
1096                 recipeLookupResult.getOrchestrationURI(), requestScope);
1097     }
1098
1099     /**
1100      * @param action
1101      * @param sir
1102      * @return
1103      */
1104     protected Actions handleReplaceInstance(Actions action, ServiceInstancesRequest sir) {
1105         if (action != null && action.equals(Action.replaceInstance)
1106                 && sir.getRequestDetails().getRequestParameters().getRetainAssignments() != null
1107                 && sir.getRequestDetails().getRequestParameters().getRetainAssignments()) {
1108             action = Action.replaceInstanceRetainAssignments;
1109         }
1110         return action;
1111     }
1112
1113     /**
1114      * This method deletes the Instance Groups.
1115      *
1116      * This method will check whether the request is not duplicate in requestdb. if its not then will save as a new
1117      * request. And will send a POST request to BEPL client to delete the Insatnce Groups.
1118      *
1119      * @param action
1120      * @param instanceIdMap
1121      * @param version
1122      * @param requestId
1123      * @param requestUri
1124      * @param requestContext
1125      * @return
1126      * @throws ApiException
1127      */
1128     public Response deleteInstanceGroups(Actions action, HashMap<String, String> instanceIdMap, String version,
1129             String requestId, String requestUri, ContainerRequestContext requestContext) throws ApiException {
1130         String instanceGroupId = instanceIdMap.get(CommonConstants.INSTANCE_GROUP_INSTANCE_ID);
1131         Boolean aLaCarte = true;
1132         String apiVersion = version.substring(1);
1133         ServiceInstancesRequest sir = new ServiceInstancesRequest();
1134         sir.setInstanceGroupId(instanceGroupId);
1135
1136         String requestScope = ModelType.instanceGroup.toString();
1137         InfraActiveRequests currentActiveReq =
1138                 msoRequest.createRequestObject(sir, action, requestId, Status.IN_PROGRESS, null, requestScope);
1139         requestHandlerUtils.setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
1140         try {
1141             requestHandlerUtils.validateHeaders(requestContext);
1142         } catch (ValidationException e) {
1143             logger.error("Exception occurred", e);
1144             ErrorLoggerInfo errorLoggerInfo =
1145                     new ErrorLoggerInfo.Builder(MessageEnum.APIH_VALIDATION_ERROR, ErrorCode.SchemaError)
1146                             .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1147             ValidateException validateException =
1148                     new ValidateException.Builder(e.getMessage(), HttpStatus.SC_BAD_REQUEST,
1149                             ErrorNumbers.SVC_BAD_PARAMETER).cause(e).errorInfo(errorLoggerInfo).build();
1150             requestHandlerUtils.updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1151             throw validateException;
1152         }
1153
1154         requestHandlerUtils.checkForDuplicateRequests(action, instanceIdMap, requestScope, currentActiveReq, null);
1155
1156         ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
1157
1158         RequestReferences referencesResponse = new RequestReferences();
1159
1160         referencesResponse.setRequestId(requestId);
1161
1162         serviceResponse.setRequestReferences(referencesResponse);
1163         Boolean isBaseVfModule = false;
1164
1165         RecipeLookupResult recipeLookupResult = new RecipeLookupResult("/mso/async/services/WorkflowActionBB", 180);
1166
1167         try {
1168             infraActiveRequestsClient.save(currentActiveReq);
1169         } catch (Exception e) {
1170             logger.error("Exception occurred", e);
1171             ErrorLoggerInfo errorLoggerInfo =
1172                     new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, ErrorCode.DataError)
1173                             .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1174             throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR,
1175                     ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e).errorInfo(errorLoggerInfo).build();
1176         }
1177
1178         RequestClientParameter requestClientParameter = new RequestClientParameter.Builder().setRequestId(requestId)
1179                 .setBaseVfModule(isBaseVfModule).setRecipeTimeout(recipeLookupResult.getRecipeTimeout())
1180                 .setRequestAction(action.toString()).setApiVersion(apiVersion).setALaCarte(aLaCarte)
1181                 .setRequestUri(requestUri).setInstanceGroupId(instanceGroupId).build();
1182
1183
1184         return requestHandlerUtils.postBPELRequest(currentActiveReq, requestClientParameter,
1185                 recipeLookupResult.getOrchestrationURI(), requestScope);
1186     }
1187
1188     protected String getPnfCorrelationId(ServiceInstancesRequest sir) {
1189         return Optional.of(sir).map(ServiceInstancesRequest::getRequestDetails)
1190                 .map(RequestDetails::getRequestParameters).map(parameters -> parameters.getUserParamValue("pnfId"))
1191                 .orElse("");
1192     }
1193
1194     private Response configurationRecipeLookup(String requestJSON, Action action, HashMap<String, String> instanceIdMap,
1195             String version, String requestId, String requestUri) throws ApiException {
1196         String serviceInstanceId;
1197         Boolean aLaCarte = null;
1198         String apiVersion = version.substring(1);
1199         ServiceInstancesRequest sir;
1200
1201         sir = requestHandlerUtils.convertJsonToServiceInstanceRequest(requestJSON, action, requestId, requestUri);
1202         String requestScope = requestHandlerUtils.deriveRequestScope(action, sir, requestUri);
1203         InfraActiveRequests currentActiveReq =
1204                 msoRequest.createRequestObject(sir, action, requestId, Status.IN_PROGRESS, requestJSON, requestScope);
1205         if (sir.getRequestDetails().getRequestParameters() != null) {
1206             aLaCarte = sir.getRequestDetails().getRequestParameters().getALaCarte();
1207         }
1208
1209         requestHandlerUtils.parseRequest(sir, instanceIdMap, action, version, requestJSON, aLaCarte, requestId,
1210                 currentActiveReq);
1211         requestHandlerUtils.setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
1212         String instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();
1213
1214         requestHandlerUtils.checkForDuplicateRequests(action, instanceIdMap, requestScope, currentActiveReq,
1215                 instanceName);
1216
1217         ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
1218         RequestReferences referencesResponse = new RequestReferences();
1219         referencesResponse.setRequestId(requestId);
1220         serviceResponse.setRequestReferences(referencesResponse);
1221
1222         String orchestrationUri = env.getProperty(CommonConstants.ALACARTE_ORCHESTRATION);
1223         String timeOut = env.getProperty(CommonConstants.ALACARTE_RECIPE_TIMEOUT);
1224
1225         if (StringUtils.isBlank(orchestrationUri) || StringUtils.isBlank(timeOut)) {
1226             String error = StringUtils.isBlank(orchestrationUri) ? "ALaCarte Orchestration URI not found in properties"
1227                     : "ALaCarte Recipe Timeout not found in properties";
1228
1229             ErrorLoggerInfo errorLoggerInfo =
1230                     new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, ErrorCode.DataError)
1231                             .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1232
1233             ValidateException validateException = new ValidateException.Builder(error, HttpStatus.SC_NOT_FOUND,
1234                     ErrorNumbers.SVC_GENERAL_SERVICE_ERROR).errorInfo(errorLoggerInfo).build();
1235
1236             requestHandlerUtils.updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1237
1238             throw validateException;
1239
1240         }
1241
1242         serviceInstanceId = "";
1243         String configurationId = "";
1244         String pnfCorrelationId = "";
1245
1246         if (sir.getServiceInstanceId() != null) {
1247             serviceInstanceId = sir.getServiceInstanceId();
1248         }
1249
1250         if (sir.getConfigurationId() != null) {
1251             configurationId = sir.getConfigurationId();
1252         }
1253
1254         pnfCorrelationId = getPnfCorrelationId(sir);
1255
1256         try {
1257             infraActiveRequestsClient.save(currentActiveReq);
1258         } catch (Exception e) {
1259             ErrorLoggerInfo errorLoggerInfo =
1260                     new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, ErrorCode.DataError)
1261                             .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1262             throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR,
1263                     ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e).errorInfo(errorLoggerInfo).build();
1264         }
1265
1266         if (!requestScope.equalsIgnoreCase(ModelType.service.name())) {
1267             aLaCarte = true;
1268         } else if (aLaCarte == null) {
1269             aLaCarte = false;
1270         }
1271         RequestClientParameter requestClientParameter = null;
1272         try {
1273             requestClientParameter = new RequestClientParameter.Builder().setRequestId(requestId).setBaseVfModule(false)
1274                     .setRecipeTimeout(Integer.parseInt(timeOut)).setRequestAction(action.toString())
1275                     .setServiceInstanceId(serviceInstanceId).setPnfCorrelationId(pnfCorrelationId)
1276                     .setConfigurationId(configurationId)
1277                     .setRequestDetails(requestHandlerUtils.mapJSONtoMSOStyle(requestJSON, sir, aLaCarte, action))
1278                     .setApiVersion(apiVersion).setALaCarte(aLaCarte).setRequestUri(requestUri).build();
1279         } catch (IOException e) {
1280             ErrorLoggerInfo errorLoggerInfo =
1281                     new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, ErrorCode.SchemaError)
1282                             .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1283             throw new ValidateException.Builder("Unable to generate RequestClientParamter object" + e.getMessage(),
1284                     HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER).errorInfo(errorLoggerInfo)
1285                             .build();
1286         }
1287
1288         return requestHandlerUtils.postBPELRequest(currentActiveReq, requestClientParameter, orchestrationUri,
1289                 requestScope);
1290     }
1291
1292     protected CloudConfiguration getCloudConfigurationOnReplace(String requestScope,
1293             HashMap<String, String> instanceIdMap, InfraActiveRequests currentActiveReq) throws ApiException {
1294         logger.debug("Replace request is missing cloudConfiguration, autofilling from create.");
1295         CloudConfiguration cloudConfiguration = null;
1296         if (requestScope.equals(ModelType.vfModule.toString())) {
1297             cloudConfiguration = bpmnRequestBuilder.getCloudConfigurationVfModuleReplace(
1298                     instanceIdMap.get("vnfInstanceId"), instanceIdMap.get("vfModuleInstanceId"));
1299         } else {
1300             cloudConfiguration = bpmnRequestBuilder.mapCloudConfigurationVnf(instanceIdMap.get("vnfInstanceId"));
1301         }
1302
1303         if (cloudConfiguration == null) {
1304             String errorMessage = "CloudConfiguration not found during autofill for replace request.";
1305             logger.error(errorMessage);
1306             updateStatus(currentActiveReq, Status.FAILED, errorMessage);
1307             throw new CloudConfigurationNotFoundException(
1308                     "CloudConfiguration not found during autofill for replace request.");
1309         }
1310         return cloudConfiguration;
1311     }
1312
1313     protected void setCloudConfigurationCurrentActiveRequest(CloudConfiguration cloudConfiguration,
1314             InfraActiveRequests currentActiveRequest) {
1315         if (cloudConfiguration.getLcpCloudRegionId() != null) {
1316             currentActiveRequest.setCloudRegion(cloudConfiguration.getLcpCloudRegionId());
1317         }
1318
1319         if (cloudConfiguration.getTenantId() != null) {
1320             currentActiveRequest.setTenantId(cloudConfiguration.getTenantId());
1321         }
1322     }
1323 }