955d6a9a94c76490b765e776266cb23248948d3c
[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     @POST
422     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/upgrade")
423     @Consumes(MediaType.APPLICATION_JSON)
424     @Produces(MediaType.APPLICATION_JSON)
425     @Operation(description = "Upgrade a Service Instance to newer model",
426             responses = @ApiResponse(
427                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
428     @Transactional
429     public Response upgradeServiceInstance(String request, @PathParam("version") String version,
430             @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
431             throws ApiException {
432         String requestId = requestHandlerUtils.getRequestId(requestContext);
433         HashMap<String, String> instanceIdMap = new HashMap<>();
434         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
435
436         return serviceInstances(request, Action.upgradeInstance, instanceIdMap, version, requestId,
437                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
438     }
439
440     @POST
441     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/replace")
442     @Consumes(MediaType.APPLICATION_JSON)
443     @Produces(MediaType.APPLICATION_JSON)
444     @Operation(description = "Replace provided VNF instance",
445             responses = @ApiResponse(
446                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
447     @Transactional
448     public Response replaceVnfInstance(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.replaceInstance, instanceIdMap, version, requestId,
456                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
457     }
458
459     @POST
460     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/healthcheck")
461     @Consumes(MediaType.APPLICATION_JSON)
462     @Produces(MediaType.APPLICATION_JSON)
463     @Operation(description = "HealthCheck for provided VNF instance",
464             responses = @ApiResponse(
465                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
466     @Transactional
467     public Response cnfHealthCheck(String request, @PathParam("version") String version,
468             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
469             @Context ContainerRequestContext requestContext) throws ApiException {
470         String requestId = requestHandlerUtils.getRequestId(requestContext);
471         HashMap<String, String> instanceIdMap = new HashMap<>();
472         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
473         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
474         return serviceInstances(request, Action.healthCheck, instanceIdMap, version, requestId,
475                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
476     }
477
478     @POST
479     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/upgradeCnf")
480     @Consumes(MediaType.APPLICATION_JSON)
481     @Produces(MediaType.APPLICATION_JSON)
482     @Operation(description = "Upgrade CNF instance",
483             responses = @ApiResponse(
484                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
485     @Transactional
486     public Response cnfUpgrade(String request, @PathParam("version") String version,
487             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
488             @Context ContainerRequestContext requestContext) throws ApiException {
489         String requestId = requestHandlerUtils.getRequestId(requestContext);
490         HashMap<String, String> instanceIdMap = new HashMap<>();
491         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
492         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
493         return serviceInstances(request, Action.upgradeCnf, instanceIdMap, version, requestId,
494                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
495     }
496
497     @PUT
498     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}")
499     @Consumes(MediaType.APPLICATION_JSON)
500     @Produces(MediaType.APPLICATION_JSON)
501     @Operation(description = "Update VNF on a specified version, serviceInstance and vnfInstance",
502             responses = @ApiResponse(
503                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
504     @Transactional
505     public Response updateVnfInstance(String request, @PathParam("version") String version,
506             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
507             @Context ContainerRequestContext requestContext) throws ApiException {
508         String requestId = requestHandlerUtils.getRequestId(requestContext);
509         HashMap<String, String> instanceIdMap = new HashMap<>();
510         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
511         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
512         return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
513                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
514     }
515
516     @POST
517     @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/applyUpdatedConfig")
518     @Consumes(MediaType.APPLICATION_JSON)
519     @Produces(MediaType.APPLICATION_JSON)
520     @Operation(description = "Apply updated configuration", responses = @ApiResponse(
521             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
522     public Response applyUpdatedConfig(String request, @PathParam("version") String version,
523             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
524             @Context ContainerRequestContext requestContext) throws ApiException {
525         String requestId = requestHandlerUtils.getRequestId(requestContext);
526         HashMap<String, String> instanceIdMap = new HashMap<>();
527         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
528         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
529         return serviceInstances(request, Action.applyUpdatedConfig, instanceIdMap, version, requestId,
530                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
531     }
532
533     @POST
534     @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/recreate")
535     @Consumes(MediaType.APPLICATION_JSON)
536     @Produces(MediaType.APPLICATION_JSON)
537     @Operation(description = "Recreate VNF Instance", responses = @ApiResponse(
538             content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
539     public Response recreateVnfInstance(String request, @PathParam("version") String version,
540             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
541             @Context ContainerRequestContext requestContext) throws ApiException {
542         String requestId = requestHandlerUtils.getRequestId(requestContext);
543         HashMap<String, String> instanceIdMap = new HashMap<>();
544         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
545         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
546         return serviceInstances(request, Action.recreateInstance, instanceIdMap, version, requestId,
547                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
548     }
549
550     @DELETE
551     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}")
552     @Consumes(MediaType.APPLICATION_JSON)
553     @Produces(MediaType.APPLICATION_JSON)
554     @Operation(description = "Delete provided VNF instance",
555             responses = @ApiResponse(
556                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
557     @Transactional
558     public Response deleteVnfInstance(String request, @PathParam("version") String version,
559             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
560             @Context ContainerRequestContext requestContext) throws ApiException {
561         String requestId = requestHandlerUtils.getRequestId(requestContext);
562         HashMap<String, String> instanceIdMap = new HashMap<>();
563         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
564         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
565         return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
566                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
567     }
568
569     @POST
570     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules")
571     @Consumes(MediaType.APPLICATION_JSON)
572     @Produces(MediaType.APPLICATION_JSON)
573     @Operation(description = "Create VfModule on a specified version, serviceInstance and vnfInstance",
574             responses = @ApiResponse(
575                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
576     @Transactional
577     public Response createVfModuleInstance(String request, @PathParam("version") String version,
578             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
579             @Context ContainerRequestContext requestContext) throws ApiException {
580         String requestId = requestHandlerUtils.getRequestId(requestContext);
581         HashMap<String, String> instanceIdMap = new HashMap<>();
582         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
583         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
584         return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
585                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
586     }
587
588     @POST
589     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/replace")
590     @Consumes(MediaType.APPLICATION_JSON)
591     @Produces(MediaType.APPLICATION_JSON)
592     @Operation(description = "Create VfModule on a specified version, serviceInstance and vnfInstance",
593             responses = @ApiResponse(
594                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
595     @Transactional
596     public Response replaceVfModuleInstance(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.replaceInstance, instanceIdMap, version, requestId,
606                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
607     }
608
609     @PUT
610     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}")
611     @Consumes(MediaType.APPLICATION_JSON)
612     @Produces(MediaType.APPLICATION_JSON)
613     @Operation(description = "Update VfModule on a specified version, serviceInstance, vnfInstance and vfModule",
614             responses = @ApiResponse(
615                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
616     @Transactional
617     public Response updateVfModuleInstance(String request, @PathParam("version") String version,
618             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
619             @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
620             throws ApiException {
621         String requestId = requestHandlerUtils.getRequestId(requestContext);
622         HashMap<String, String> instanceIdMap = new HashMap<>();
623         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
624         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
625         instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
626         return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
627                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
628     }
629
630     @POST
631     @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/inPlaceSoftwareUpdate")
632     @Consumes(MediaType.APPLICATION_JSON)
633     @Produces(MediaType.APPLICATION_JSON)
634     @Operation(description = "Perform VNF software update",
635             responses = @ApiResponse(
636                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
637     @Transactional
638     public Response inPlaceSoftwareUpdate(String request, @PathParam("version") String version,
639             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
640             @Context ContainerRequestContext requestContext) 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         return serviceInstances(request, Action.inPlaceSoftwareUpdate, instanceIdMap, version, requestId,
646                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
647     }
648
649     @DELETE
650     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}")
651     @Consumes(MediaType.APPLICATION_JSON)
652     @Produces(MediaType.APPLICATION_JSON)
653     @Operation(description = "Delete provided VfModule instance",
654             responses = @ApiResponse(
655                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
656     @Transactional
657     public Response deleteVfModuleInstance(String request, @PathParam("version") String version,
658             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
659             @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
660             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         instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
666         return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
667                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
668     }
669
670     @POST
671     @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/deactivateAndCloudDelete")
672     @Consumes(MediaType.APPLICATION_JSON)
673     @Produces(MediaType.APPLICATION_JSON)
674     @Operation(description = "Deactivate and Cloud Delete VfModule instance",
675             responses = @ApiResponse(
676                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
677     @Transactional
678     public Response deactivateAndCloudDeleteVfModuleInstance(String request, @PathParam("version") String version,
679             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
680             @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
681             throws ApiException {
682         String requestId = requestHandlerUtils.getRequestId(requestContext);
683         HashMap<String, String> instanceIdMap = new HashMap<>();
684         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
685         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
686         instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
687         Response response = serviceInstances(request, Action.deactivateAndCloudDelete, instanceIdMap, version,
688                 requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
689         return response;
690     }
691
692     @POST
693     @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/scaleOut")
694     @Consumes(MediaType.APPLICATION_JSON)
695     @Produces(MediaType.APPLICATION_JSON)
696     @Operation(description = "VF Auto Scale Out",
697             responses = @ApiResponse(
698                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
699     @Transactional
700     public Response scaleOutVfModule(String request, @PathParam("version") String version,
701             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
702             @Context ContainerRequestContext requestContext) throws ApiException {
703         String requestId = requestHandlerUtils.getRequestId(requestContext);
704         HashMap<String, String> instanceIdMap = new HashMap<>();
705         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
706         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
707         return serviceInstances(request, Action.scaleOut, instanceIdMap, version, requestId,
708                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
709     }
710
711     @POST
712     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups")
713     @Consumes(MediaType.APPLICATION_JSON)
714     @Produces(MediaType.APPLICATION_JSON)
715     @Operation(description = "Create VolumeGroup on a specified version, serviceInstance, vnfInstance",
716             responses = @ApiResponse(
717                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
718     @Transactional
719     public Response createVolumeGroupInstance(String request, @PathParam("version") String version,
720             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
721             @Context ContainerRequestContext requestContext) throws ApiException {
722         String requestId = requestHandlerUtils.getRequestId(requestContext);
723         HashMap<String, String> instanceIdMap = new HashMap<>();
724         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
725         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
726         return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
727                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
728     }
729
730     @PUT
731     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}")
732     @Consumes(MediaType.APPLICATION_JSON)
733     @Produces(MediaType.APPLICATION_JSON)
734     @Operation(description = "Update VolumeGroup on a specified version, serviceInstance, vnfInstance and volumeGroup",
735             responses = @ApiResponse(
736                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
737     @Transactional
738     public Response updateVolumeGroupInstance(String request, @PathParam("version") String version,
739             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
740             @PathParam("volumeGroupInstanceId") String volumeGroupInstanceId,
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         instanceIdMap.put("volumeGroupInstanceId", volumeGroupInstanceId);
747         return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
748                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
749     }
750
751     @DELETE
752     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}")
753     @Consumes(MediaType.APPLICATION_JSON)
754     @Produces(MediaType.APPLICATION_JSON)
755     @Operation(description = "Delete provided VolumeGroup instance",
756             responses = @ApiResponse(
757                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
758     @Transactional
759     public Response deleteVolumeGroupInstance(String request, @PathParam("version") String version,
760             @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
761             @PathParam("volumeGroupInstanceId") String volumeGroupInstanceId,
762             @Context ContainerRequestContext requestContext) throws ApiException {
763         String requestId = requestHandlerUtils.getRequestId(requestContext);
764         HashMap<String, String> instanceIdMap = new HashMap<>();
765         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
766         instanceIdMap.put("vnfInstanceId", vnfInstanceId);
767         instanceIdMap.put("volumeGroupInstanceId", volumeGroupInstanceId);
768         return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
769                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
770     }
771
772     @POST
773     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks")
774     @Consumes(MediaType.APPLICATION_JSON)
775     @Produces(MediaType.APPLICATION_JSON)
776     @Operation(description = "Create NetworkInstance on a specified version and serviceInstance ",
777             responses = @ApiResponse(
778                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
779     @Transactional
780     public Response createNetworkInstance(String request, @PathParam("version") String version,
781             @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
782             throws ApiException {
783         String requestId = requestHandlerUtils.getRequestId(requestContext);
784         HashMap<String, String> instanceIdMap = new HashMap<>();
785         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
786         return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
787                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
788     }
789
790     @PUT
791     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks/{networkInstanceId}")
792     @Consumes(MediaType.APPLICATION_JSON)
793     @Produces(MediaType.APPLICATION_JSON)
794     @Operation(description = "Update VolumeGroup on a specified version, serviceInstance, networkInstance",
795             responses = @ApiResponse(
796                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
797     @Transactional
798     public Response updateNetworkInstance(String request, @PathParam("version") String version,
799             @PathParam("serviceInstanceId") String serviceInstanceId,
800             @PathParam("networkInstanceId") String networkInstanceId, @Context ContainerRequestContext requestContext)
801             throws ApiException {
802         String requestId = requestHandlerUtils.getRequestId(requestContext);
803         HashMap<String, String> instanceIdMap = new HashMap<>();
804         instanceIdMap.put("serviceInstanceId", serviceInstanceId);
805         instanceIdMap.put("networkInstanceId", networkInstanceId);
806         return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
807                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
808     }
809
810     @DELETE
811     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks/{networkInstanceId}")
812     @Consumes(MediaType.APPLICATION_JSON)
813     @Produces(MediaType.APPLICATION_JSON)
814     @Operation(description = "Delete provided Network instance",
815             responses = @ApiResponse(
816                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
817     @Transactional
818     public Response deleteNetworkInstance(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.deleteInstance, instanceIdMap, version, requestId,
827                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
828     }
829
830     @POST
831     @Path("/{version:[vV][7]}/instanceGroups")
832     @Consumes(MediaType.APPLICATION_JSON)
833     @Produces(MediaType.APPLICATION_JSON)
834     @Operation(description = "Create instanceGroups",
835             responses = @ApiResponse(
836                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
837     @Transactional
838     public Response createInstanceGroups(String request, @PathParam("version") String version,
839             @Context ContainerRequestContext requestContext) throws ApiException {
840         String requestId = requestHandlerUtils.getRequestId(requestContext);
841         return serviceInstances(request, Action.createInstance, null, version, requestId,
842                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
843     }
844
845     @DELETE
846     @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}")
847     @Consumes(MediaType.APPLICATION_JSON)
848     @Produces(MediaType.APPLICATION_JSON)
849     @Operation(description = "Delete instanceGroup",
850             responses = @ApiResponse(
851                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
852     @Transactional
853     public Response deleteInstanceGroups(@PathParam("version") String version,
854             @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext)
855             throws ApiException {
856         String requestId = requestHandlerUtils.getRequestId(requestContext);
857         HashMap<String, String> instanceIdMap = new HashMap<>();
858         instanceIdMap.put(CommonConstants.INSTANCE_GROUP_INSTANCE_ID, instanceGroupId);
859         return deleteInstanceGroups(Action.deleteInstance, instanceIdMap, version, requestId,
860                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix), requestContext);
861     }
862
863     @POST
864     @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}/addMembers")
865     @Consumes(MediaType.APPLICATION_JSON)
866     @Produces(MediaType.APPLICATION_JSON)
867     @Operation(description = "Add instanceGroup members",
868             responses = @ApiResponse(
869                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
870     @Transactional
871     public Response addInstanceGroupMembers(String request, @PathParam("version") String version,
872             @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext)
873             throws ApiException {
874         String requestId = requestHandlerUtils.getRequestId(requestContext);
875         HashMap<String, String> instanceIdMap = new HashMap<>();
876         instanceIdMap.put(CommonConstants.INSTANCE_GROUP_INSTANCE_ID, instanceGroupId);
877         return serviceInstances(request, Action.addMembers, instanceIdMap, version, requestId,
878                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
879     }
880
881     @POST
882     @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}/removeMembers")
883     @Consumes(MediaType.APPLICATION_JSON)
884     @Produces(MediaType.APPLICATION_JSON)
885     @Operation(description = "Remove instanceGroup members",
886             responses = @ApiResponse(
887                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
888     @Transactional
889     public Response removeInstanceGroupMembers(String request, @PathParam("version") String version,
890             @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext)
891             throws ApiException {
892         String requestId = requestHandlerUtils.getRequestId(requestContext);
893         HashMap<String, String> instanceIdMap = new HashMap<>();
894         instanceIdMap.put(CommonConstants.INSTANCE_GROUP_INSTANCE_ID, instanceGroupId);
895         return serviceInstances(request, Action.removeMembers, instanceIdMap, version, requestId,
896                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
897     }
898
899     /**
900      * This method is used for POST a request to the BPEL client (BPMN).
901      *
902      * Convert the requestJson to ServiceInstanceRequest(sir), create the msoRequest object, check whether this request
903      * is already being processed in requestdb for duplicate check.
904      *
905      * Based on the alacarte flag, sir and msoRequest will do the recipe lookup from the service and servicerecipe table
906      * of catalogdb, and get the OrchestrationURI.
907      *
908      * If the present request is not the duplicate request then this request will be saved in the requestdb. and will
909      * POST a request to the BPMN engine at the OrchestrationURI fetched.
910      *
911      * @param requestJSON Json fetched as body in the API call
912      * @param action Type of action to be performed
913      * @param instanceIdMap Map of instance ids of service/vnf/vf/configuration etc..
914      * @param version Supported version of API
915      * @param requestId Unique id for the request
916      * @param requestUri
917      * @return response object
918      * @throws ApiException
919      */
920     public Response serviceInstances(String requestJSON, Actions action, HashMap<String, String> instanceIdMap,
921             String version, String requestId, String requestUri) throws ApiException {
922         return serviceInstances(requestJSON, action, instanceIdMap, version, requestId, requestUri, null);
923
924     }
925
926     public Response serviceInstances(String requestJSON, Actions action, HashMap<String, String> instanceIdMap,
927             String version, String requestId, String requestUri, HashMap<String, String> queryParams)
928             throws ApiException {
929         String serviceInstanceId;
930         Boolean aLaCarte = null;
931         ServiceInstancesRequest sir;
932         String apiVersion = version.substring(1);
933
934         sir = requestHandlerUtils.convertJsonToServiceInstanceRequest(requestJSON, action, requestId, requestUri);
935         action = handleReplaceInstance(action, sir);
936
937         String requestScope = requestHandlerUtils.deriveRequestScope(action, sir, requestUri);
938         try {
939             requestValidatorListenerRunner.runValidations(requestUri, instanceIdMap, sir, queryParams, action);
940         } catch (ApiException e) {
941             msoRequest.createErrorRequestRecord(Status.FAILED, requestId, e.getMessage(), action, requestScope,
942                     requestJSON, requestHandlerUtils
943                             .getServiceInstanceIdForValidationError(sir, instanceIdMap, requestScope).orElse(null),
944                     sir);
945             throw e;
946         }
947
948         InfraActiveRequests currentActiveReq =
949                 msoRequest.createRequestObject(sir, action, requestId, Status.IN_PROGRESS, requestJSON, requestScope);
950         if (sir.getRequestDetails().getRequestParameters() != null) {
951             aLaCarte = sir.getRequestDetails().getRequestParameters().getALaCarte();
952         }
953
954         requestHandlerUtils.parseRequest(sir, instanceIdMap, action, version, requestJSON, aLaCarte, requestId,
955                 currentActiveReq);
956         if ((action == Action.replaceInstance || action == Action.replaceInstanceRetainAssignments)
957                 && (requestScope.equals(ModelType.vnf.toString()) || requestScope.equals(ModelType.vfModule.toString())
958                         || requestScope.equals(ModelType.cnf.toString()))
959                 && sir.getRequestDetails().getCloudConfiguration() == null) {
960             CloudConfiguration cloudConfiguration =
961                     getCloudConfigurationOnReplace(requestScope, instanceIdMap, currentActiveReq);
962             sir.getRequestDetails().setCloudConfiguration(cloudConfiguration);
963             setCloudConfigurationCurrentActiveRequest(cloudConfiguration, currentActiveReq);
964         }
965         requestHandlerUtils.setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
966
967         String instanceName = null;
968         if (sir.getRequestDetails().getRequestInfo() != null) {
969             instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();
970         }
971         boolean alaCarteFlag = msoRequest.getAlacarteFlag(sir);
972         String vnfType = msoRequest.getVnfType(sir, requestScope);
973         String networkType = msoRequest.getNetworkType(sir, requestScope);
974         String sdcServiceModelVersion = msoRequest.getSDCServiceModelVersion(sir);
975         String vfModuleType = msoRequest.getVfModuleType(sir, requestScope);
976
977         if (requestScope.equalsIgnoreCase(ModelType.vnf.name()) && vnfType != null) {
978             currentActiveReq.setVnfType(vnfType);
979         } else if (requestScope.equalsIgnoreCase(ModelType.network.name()) && networkType != null) {
980             currentActiveReq.setNetworkType(networkType);
981         }
982
983         requestHandlerUtils.checkForDuplicateRequests(action, instanceIdMap, requestScope, currentActiveReq,
984                 instanceName);
985
986         ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
987
988         RequestReferences referencesResponse = new RequestReferences();
989
990         referencesResponse.setRequestId(requestId);
991
992         serviceResponse.setRequestReferences(referencesResponse);
993         RecipeLookupResult recipeLookupResult =
994                 requestHandlerUtils.getServiceInstanceOrchestrationURI(sir, action, alaCarteFlag, currentActiveReq);
995         String serviceInstanceType = requestHandlerUtils.getServiceType(requestScope, sir, alaCarteFlag);
996
997         ModelInfo modelInfo = sir.getRequestDetails().getModelInfo();
998         ModelType modelType = requestHandlerUtils.getModelType(action, modelInfo);
999
1000         Boolean isBaseVfModule = false;
1001
1002         if (modelType.equals(ModelType.vfModule)) {
1003             isBaseVfModule = requestHandlerUtils.getIsBaseVfModule(modelInfo, action, vnfType, sdcServiceModelVersion,
1004                     currentActiveReq);
1005         }
1006
1007         serviceInstanceId = requestHandlerUtils.setServiceInstanceId(requestScope, sir);
1008         String vnfId = "";
1009         String vfModuleId = "";
1010         String volumeGroupId = "";
1011         String networkId = "";
1012         String pnfCorrelationId = "";
1013         String instanceGroupId = null;
1014
1015         if (sir.getVnfInstanceId() != null) {
1016             vnfId = sir.getVnfInstanceId();
1017         }
1018
1019         if (sir.getVfModuleInstanceId() != null) {
1020             vfModuleId = sir.getVfModuleInstanceId();
1021         }
1022
1023         if (sir.getVolumeGroupInstanceId() != null) {
1024             volumeGroupId = sir.getVolumeGroupInstanceId();
1025         }
1026
1027         if (sir.getNetworkInstanceId() != null) {
1028             networkId = sir.getNetworkInstanceId();
1029         }
1030         if (sir.getInstanceGroupId() != null) {
1031             instanceGroupId = sir.getInstanceGroupId();
1032         }
1033
1034         pnfCorrelationId = getPnfCorrelationId(sir);
1035
1036         try {
1037             infraActiveRequestsClient.save(currentActiveReq);
1038         } catch (Exception e) {
1039             logger.error("Exception occurred", e);
1040             ErrorLoggerInfo errorLoggerInfo =
1041                     new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, ErrorCode.DataError)
1042                             .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1043             throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR,
1044                     ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e).errorInfo(errorLoggerInfo).build();
1045         }
1046
1047         if (!requestScope.equalsIgnoreCase(ModelType.service.name()) && action != Action.recreateInstance
1048                 && !requestScope.equalsIgnoreCase(ModelType.vnf.name())) {
1049             aLaCarte = true;
1050         } else if (aLaCarte == null) {
1051             aLaCarte = false;
1052         }
1053
1054
1055         RequestClientParameter requestClientParameter;
1056         try {
1057             requestClientParameter = new RequestClientParameter.Builder().setRequestId(requestId)
1058                     .setBaseVfModule(isBaseVfModule).setRecipeTimeout(recipeLookupResult.getRecipeTimeout())
1059                     .setRequestAction(action.toString()).setServiceInstanceId(serviceInstanceId)
1060                     .setPnfCorrelationId(pnfCorrelationId).setVnfId(vnfId).setVfModuleId(vfModuleId)
1061                     .setVolumeGroupId(volumeGroupId).setNetworkId(networkId).setServiceType(serviceInstanceType)
1062                     .setVnfType(vnfType).setVfModuleType(vfModuleType).setNetworkType(networkType)
1063                     .setRequestDetails(requestHandlerUtils.mapJSONtoMSOStyle(requestJSON, sir, aLaCarte, action))
1064                     .setApiVersion(apiVersion).setALaCarte(aLaCarte).setRequestUri(requestUri)
1065                     .setInstanceGroupId(instanceGroupId).build();
1066         } catch (IOException e) {
1067             logger.error("Exception occurred", e);
1068             ErrorLoggerInfo errorLoggerInfo =
1069                     new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, ErrorCode.SchemaError)
1070                             .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1071             throw new ValidateException.Builder("Unable to generate RequestClientParamter object" + e.getMessage(),
1072                     HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER).errorInfo(errorLoggerInfo)
1073                             .build();
1074         }
1075         return requestHandlerUtils.postBPELRequest(currentActiveReq, requestClientParameter,
1076                 recipeLookupResult.getOrchestrationURI(), requestScope);
1077     }
1078
1079     /**
1080      * @param action
1081      * @param sir
1082      * @return
1083      */
1084     protected Actions handleReplaceInstance(Actions action, ServiceInstancesRequest sir) {
1085         if (action != null && action.equals(Action.replaceInstance)
1086                 && sir.getRequestDetails().getRequestParameters().getRetainAssignments() != null
1087                 && sir.getRequestDetails().getRequestParameters().getRetainAssignments()) {
1088             action = Action.replaceInstanceRetainAssignments;
1089         }
1090         return action;
1091     }
1092
1093     /**
1094      * This method deletes the Instance Groups.
1095      *
1096      * This method will check whether the request is not duplicate in requestdb. if its not then will save as a new
1097      * request. And will send a POST request to BEPL client to delete the Insatnce Groups.
1098      *
1099      * @param action
1100      * @param instanceIdMap
1101      * @param version
1102      * @param requestId
1103      * @param requestUri
1104      * @param requestContext
1105      * @return
1106      * @throws ApiException
1107      */
1108     public Response deleteInstanceGroups(Actions action, HashMap<String, String> instanceIdMap, String version,
1109             String requestId, String requestUri, ContainerRequestContext requestContext) throws ApiException {
1110         String instanceGroupId = instanceIdMap.get(CommonConstants.INSTANCE_GROUP_INSTANCE_ID);
1111         Boolean aLaCarte = true;
1112         String apiVersion = version.substring(1);
1113         ServiceInstancesRequest sir = new ServiceInstancesRequest();
1114         sir.setInstanceGroupId(instanceGroupId);
1115
1116         String requestScope = ModelType.instanceGroup.toString();
1117         InfraActiveRequests currentActiveReq =
1118                 msoRequest.createRequestObject(sir, action, requestId, Status.IN_PROGRESS, null, requestScope);
1119         requestHandlerUtils.setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
1120         try {
1121             requestHandlerUtils.validateHeaders(requestContext);
1122         } catch (ValidationException e) {
1123             logger.error("Exception occurred", e);
1124             ErrorLoggerInfo errorLoggerInfo =
1125                     new ErrorLoggerInfo.Builder(MessageEnum.APIH_VALIDATION_ERROR, ErrorCode.SchemaError)
1126                             .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1127             ValidateException validateException =
1128                     new ValidateException.Builder(e.getMessage(), HttpStatus.SC_BAD_REQUEST,
1129                             ErrorNumbers.SVC_BAD_PARAMETER).cause(e).errorInfo(errorLoggerInfo).build();
1130             requestHandlerUtils.updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1131             throw validateException;
1132         }
1133
1134         requestHandlerUtils.checkForDuplicateRequests(action, instanceIdMap, requestScope, currentActiveReq, null);
1135
1136         ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
1137
1138         RequestReferences referencesResponse = new RequestReferences();
1139
1140         referencesResponse.setRequestId(requestId);
1141
1142         serviceResponse.setRequestReferences(referencesResponse);
1143         Boolean isBaseVfModule = false;
1144
1145         RecipeLookupResult recipeLookupResult = new RecipeLookupResult("/mso/async/services/WorkflowActionBB", 180);
1146
1147         try {
1148             infraActiveRequestsClient.save(currentActiveReq);
1149         } catch (Exception e) {
1150             logger.error("Exception occurred", e);
1151             ErrorLoggerInfo errorLoggerInfo =
1152                     new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, ErrorCode.DataError)
1153                             .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1154             throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR,
1155                     ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e).errorInfo(errorLoggerInfo).build();
1156         }
1157
1158         RequestClientParameter requestClientParameter = new RequestClientParameter.Builder().setRequestId(requestId)
1159                 .setBaseVfModule(isBaseVfModule).setRecipeTimeout(recipeLookupResult.getRecipeTimeout())
1160                 .setRequestAction(action.toString()).setApiVersion(apiVersion).setALaCarte(aLaCarte)
1161                 .setRequestUri(requestUri).setInstanceGroupId(instanceGroupId).build();
1162
1163
1164         return requestHandlerUtils.postBPELRequest(currentActiveReq, requestClientParameter,
1165                 recipeLookupResult.getOrchestrationURI(), requestScope);
1166     }
1167
1168     protected String getPnfCorrelationId(ServiceInstancesRequest sir) {
1169         return Optional.of(sir).map(ServiceInstancesRequest::getRequestDetails)
1170                 .map(RequestDetails::getRequestParameters).map(parameters -> parameters.getUserParamValue("pnfId"))
1171                 .orElse("");
1172     }
1173
1174     private Response configurationRecipeLookup(String requestJSON, Action action, HashMap<String, String> instanceIdMap,
1175             String version, String requestId, String requestUri) throws ApiException {
1176         String serviceInstanceId;
1177         Boolean aLaCarte = null;
1178         String apiVersion = version.substring(1);
1179         ServiceInstancesRequest sir;
1180
1181         sir = requestHandlerUtils.convertJsonToServiceInstanceRequest(requestJSON, action, requestId, requestUri);
1182         String requestScope = requestHandlerUtils.deriveRequestScope(action, sir, requestUri);
1183         InfraActiveRequests currentActiveReq =
1184                 msoRequest.createRequestObject(sir, action, requestId, Status.IN_PROGRESS, requestJSON, requestScope);
1185         if (sir.getRequestDetails().getRequestParameters() != null) {
1186             aLaCarte = sir.getRequestDetails().getRequestParameters().getALaCarte();
1187         }
1188
1189         requestHandlerUtils.parseRequest(sir, instanceIdMap, action, version, requestJSON, aLaCarte, requestId,
1190                 currentActiveReq);
1191         requestHandlerUtils.setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
1192         String instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();
1193
1194         requestHandlerUtils.checkForDuplicateRequests(action, instanceIdMap, requestScope, currentActiveReq,
1195                 instanceName);
1196
1197         ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
1198         RequestReferences referencesResponse = new RequestReferences();
1199         referencesResponse.setRequestId(requestId);
1200         serviceResponse.setRequestReferences(referencesResponse);
1201
1202         String orchestrationUri = env.getProperty(CommonConstants.ALACARTE_ORCHESTRATION);
1203         String timeOut = env.getProperty(CommonConstants.ALACARTE_RECIPE_TIMEOUT);
1204
1205         if (StringUtils.isBlank(orchestrationUri) || StringUtils.isBlank(timeOut)) {
1206             String error = StringUtils.isBlank(orchestrationUri) ? "ALaCarte Orchestration URI not found in properties"
1207                     : "ALaCarte Recipe Timeout not found in properties";
1208
1209             ErrorLoggerInfo errorLoggerInfo =
1210                     new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, ErrorCode.DataError)
1211                             .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1212
1213             ValidateException validateException = new ValidateException.Builder(error, HttpStatus.SC_NOT_FOUND,
1214                     ErrorNumbers.SVC_GENERAL_SERVICE_ERROR).errorInfo(errorLoggerInfo).build();
1215
1216             requestHandlerUtils.updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1217
1218             throw validateException;
1219
1220         }
1221
1222         serviceInstanceId = "";
1223         String configurationId = "";
1224         String pnfCorrelationId = "";
1225
1226         if (sir.getServiceInstanceId() != null) {
1227             serviceInstanceId = sir.getServiceInstanceId();
1228         }
1229
1230         if (sir.getConfigurationId() != null) {
1231             configurationId = sir.getConfigurationId();
1232         }
1233
1234         pnfCorrelationId = getPnfCorrelationId(sir);
1235
1236         try {
1237             infraActiveRequestsClient.save(currentActiveReq);
1238         } catch (Exception e) {
1239             ErrorLoggerInfo errorLoggerInfo =
1240                     new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, ErrorCode.DataError)
1241                             .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1242             throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR,
1243                     ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e).errorInfo(errorLoggerInfo).build();
1244         }
1245
1246         if (!requestScope.equalsIgnoreCase(ModelType.service.name())) {
1247             aLaCarte = true;
1248         } else if (aLaCarte == null) {
1249             aLaCarte = false;
1250         }
1251         RequestClientParameter requestClientParameter = null;
1252         try {
1253             requestClientParameter = new RequestClientParameter.Builder().setRequestId(requestId).setBaseVfModule(false)
1254                     .setRecipeTimeout(Integer.parseInt(timeOut)).setRequestAction(action.toString())
1255                     .setServiceInstanceId(serviceInstanceId).setPnfCorrelationId(pnfCorrelationId)
1256                     .setConfigurationId(configurationId)
1257                     .setRequestDetails(requestHandlerUtils.mapJSONtoMSOStyle(requestJSON, sir, aLaCarte, action))
1258                     .setApiVersion(apiVersion).setALaCarte(aLaCarte).setRequestUri(requestUri).build();
1259         } catch (IOException e) {
1260             ErrorLoggerInfo errorLoggerInfo =
1261                     new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, ErrorCode.SchemaError)
1262                             .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1263             throw new ValidateException.Builder("Unable to generate RequestClientParamter object" + e.getMessage(),
1264                     HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER).errorInfo(errorLoggerInfo)
1265                             .build();
1266         }
1267
1268         return requestHandlerUtils.postBPELRequest(currentActiveReq, requestClientParameter, orchestrationUri,
1269                 requestScope);
1270     }
1271
1272     protected CloudConfiguration getCloudConfigurationOnReplace(String requestScope,
1273             HashMap<String, String> instanceIdMap, InfraActiveRequests currentActiveReq) throws ApiException {
1274         logger.debug("Replace request is missing cloudConfiguration, autofilling from create.");
1275         CloudConfiguration cloudConfiguration = null;
1276         if (requestScope.equals(ModelType.vfModule.toString())) {
1277             cloudConfiguration = bpmnRequestBuilder.getCloudConfigurationVfModuleReplace(
1278                     instanceIdMap.get("vnfInstanceId"), instanceIdMap.get("vfModuleInstanceId"));
1279         } else {
1280             cloudConfiguration = bpmnRequestBuilder.mapCloudConfigurationVnf(instanceIdMap.get("vnfInstanceId"));
1281         }
1282
1283         if (cloudConfiguration == null) {
1284             String errorMessage = "CloudConfiguration not found during autofill for replace request.";
1285             logger.error(errorMessage);
1286             updateStatus(currentActiveReq, Status.FAILED, errorMessage);
1287             throw new CloudConfigurationNotFoundException(
1288                     "CloudConfiguration not found during autofill for replace request.");
1289         }
1290         return cloudConfiguration;
1291     }
1292
1293     protected void setCloudConfigurationCurrentActiveRequest(CloudConfiguration cloudConfiguration,
1294             InfraActiveRequests currentActiveRequest) {
1295         if (cloudConfiguration.getLcpCloudRegionId() != null) {
1296             currentActiveRequest.setCloudRegion(cloudConfiguration.getLcpCloudRegionId());
1297         }
1298
1299         if (cloudConfiguration.getTenantId() != null) {
1300             currentActiveRequest.setTenantId(cloudConfiguration.getTenantId());
1301         }
1302     }
1303 }