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