2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
7 * ================================================================================
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ============LICENSE_END=========================================================
22 package org.onap.so.apihandlerinfra;
25 import com.fasterxml.jackson.annotation.JsonInclude.Include;
26 import com.fasterxml.jackson.core.JsonParseException;
27 import com.fasterxml.jackson.core.JsonProcessingException;
28 import com.fasterxml.jackson.databind.JsonMappingException;
29 import com.fasterxml.jackson.databind.ObjectMapper;
30 import io.swagger.annotations.Api;
31 import io.swagger.annotations.ApiOperation;
32 import org.apache.commons.lang.StringUtils;
33 import org.apache.http.HttpResponse;
34 import org.apache.http.HttpStatus;
35 import org.onap.logging.ref.slf4j.ONAPLogConstants;
36 import org.onap.so.apihandler.camundabeans.CamundaResponse;
37 import org.onap.so.apihandler.common.CommonConstants;
38 import org.onap.so.apihandler.common.ErrorNumbers;
39 import org.onap.so.apihandler.common.RequestClient;
40 import org.onap.so.apihandler.common.RequestClientFactory;
41 import org.onap.so.apihandler.common.RequestClientParameter;
42 import org.onap.so.apihandler.common.ResponseBuilder;
43 import org.onap.so.apihandler.common.ResponseHandler;
44 import org.onap.so.apihandlerinfra.exceptions.ApiException;
45 import org.onap.so.apihandlerinfra.exceptions.BPMNFailureException;
46 import org.onap.so.apihandlerinfra.exceptions.ClientConnectionException;
47 import org.onap.so.apihandlerinfra.exceptions.DuplicateRequestException;
48 import org.onap.so.apihandlerinfra.exceptions.RecipeNotFoundException;
49 import org.onap.so.apihandlerinfra.exceptions.RequestDbFailureException;
50 import org.onap.so.apihandlerinfra.exceptions.ValidateException;
51 import org.onap.so.apihandlerinfra.exceptions.VfModuleNotFoundException;
52 import org.onap.so.apihandlerinfra.logging.ErrorLoggerInfo;
53 import org.onap.so.db.catalog.beans.NetworkResource;
54 import org.onap.so.db.catalog.beans.Recipe;
55 import org.onap.so.db.catalog.beans.ServiceRecipe;
56 import org.onap.so.db.catalog.beans.VfModule;
57 import org.onap.so.db.catalog.beans.VfModuleCustomization;
58 import org.onap.so.db.catalog.beans.VnfRecipe;
59 import org.onap.so.db.catalog.beans.VnfResource;
60 import org.onap.so.db.catalog.beans.VnfResourceCustomization;
61 import org.onap.so.db.catalog.client.CatalogDbClient;
62 import org.onap.so.db.request.beans.InfraActiveRequests;
63 import org.onap.so.db.request.client.RequestsDbClient;
64 import org.onap.so.exceptions.ValidationException;
65 import org.onap.so.logger.MessageEnum;
66 import org.onap.so.logger.MsoLogger;
67 import org.onap.so.serviceinstancebeans.CloudConfiguration;
68 import org.onap.so.serviceinstancebeans.ModelInfo;
69 import org.onap.so.serviceinstancebeans.ModelType;
70 import org.onap.so.serviceinstancebeans.Networks;
71 import org.onap.so.serviceinstancebeans.RelatedInstance;
72 import org.onap.so.serviceinstancebeans.RelatedInstanceList;
73 import org.onap.so.serviceinstancebeans.RequestDetails;
74 import org.onap.so.serviceinstancebeans.RequestParameters;
75 import org.onap.so.serviceinstancebeans.RequestReferences;
76 import org.onap.so.serviceinstancebeans.Service;
77 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
78 import org.onap.so.serviceinstancebeans.ServiceInstancesResponse;
79 import org.onap.so.serviceinstancebeans.VfModules;
80 import org.onap.so.serviceinstancebeans.Vnfs;
81 import org.onap.so.utils.UUIDChecker;
82 import org.springframework.beans.factory.annotation.Autowired;
83 import org.springframework.core.env.Environment;
84 import org.springframework.stereotype.Component;
86 import javax.transaction.Transactional;
87 import javax.ws.rs.Consumes;
88 import javax.ws.rs.DELETE;
89 import javax.ws.rs.POST;
90 import javax.ws.rs.PUT;
91 import javax.ws.rs.Path;
92 import javax.ws.rs.PathParam;
93 import javax.ws.rs.Produces;
94 import javax.ws.rs.container.ContainerRequestContext;
95 import javax.ws.rs.core.Context;
96 import javax.ws.rs.core.MediaType;
97 import javax.ws.rs.core.MultivaluedMap;
98 import javax.ws.rs.core.Response;
99 import java.io.IOException;
101 import java.sql.Timestamp;
102 import java.util.ArrayList;
103 import java.util.HashMap;
104 import java.util.List;
105 import java.util.Map;
106 import java.util.Optional;
109 @Path("/onap/so/infra/serviceInstantiation")
110 @Api(value="/onap/so/infra/serviceInstantiation",description="Infrastructure API Requests for Service Instances")
111 public class ServiceInstances {
113 private static MsoLogger msoLogger = MsoLogger.getMsoLogger (MsoLogger.Catalog.APIH,MsoRequest.class);
114 private static String NAME = "name";
115 private static String VALUE = "value";
116 private static final String SAVE_TO_DB = "save instance to db";
119 private Environment env;
122 private RequestClientFactory reqClientFactory;
125 private CatalogDbClient catalogDbClient;
128 private RequestsDbClient infraActiveRequestsClient;
131 private ResponseBuilder builder;
134 private MsoRequest msoRequest;
137 @Path("/{version:[vV][5-7]}/serviceInstances")
138 @Consumes(MediaType.APPLICATION_JSON)
139 @Produces(MediaType.APPLICATION_JSON)
140 @ApiOperation(value="Create a Service Instance on a version provided",response=Response.class)
142 public Response createServiceInstance(String request, @PathParam("version") String version, @Context ContainerRequestContext requestContext) throws ApiException {
143 String requestId = getRequestId(requestContext);
144 return serviceInstances(request, Action.createInstance, null, version, requestId, getRequestUri(requestContext));
148 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/activate")
149 @Consumes(MediaType.APPLICATION_JSON)
150 @Produces(MediaType.APPLICATION_JSON)
151 @ApiOperation(value="Activate provided Service Instance",response=Response.class)
153 public Response activateServiceInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
154 String requestId = getRequestId(requestContext);
155 HashMap<String, String> instanceIdMap = new HashMap<>();
156 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
157 return serviceInstances(request, Action.activateInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
161 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/deactivate")
162 @Consumes(MediaType.APPLICATION_JSON)
163 @Produces(MediaType.APPLICATION_JSON)
164 @ApiOperation(value="Deactivate provided Service Instance",response=Response.class)
166 public Response deactivateServiceInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
167 String requestId = getRequestId(requestContext);
168 HashMap<String, String> instanceIdMap = new HashMap<>();
169 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
170 return serviceInstances(request, Action.deactivateInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
174 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}")
175 @Consumes(MediaType.APPLICATION_JSON)
176 @Produces(MediaType.APPLICATION_JSON)
177 @ApiOperation(value="Delete provided Service Instance",response=Response.class)
179 public Response deleteServiceInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
180 String requestId = getRequestId(requestContext);
181 HashMap<String, String> instanceIdMap = new HashMap<>();
182 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
183 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
187 @Path("/{version:[vV][7]}/serviceInstances/assign")
188 @Consumes(MediaType.APPLICATION_JSON)
189 @Produces(MediaType.APPLICATION_JSON)
190 @ApiOperation(value="Assign Service Instance", response=Response.class)
192 public Response assignServiceInstance(String request, @PathParam("version") String version, @Context ContainerRequestContext requestContext) throws ApiException {
193 String requestId = getRequestId(requestContext);
194 return serviceInstances(request, Action.assignInstance, null, version, requestId, getRequestUri(requestContext));
198 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/unassign")
199 @Consumes(MediaType.APPLICATION_JSON)
200 @Produces(MediaType.APPLICATION_JSON)
201 @ApiOperation(value="Unassign Service Instance", response=Response.class)
203 public Response unassignServiceInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
204 String requestId = getRequestId(requestContext);
205 HashMap<String, String> instanceIdMap = new HashMap<String,String>();
206 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
207 return serviceInstances(request, Action.unassignInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
211 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations")
212 @Consumes(MediaType.APPLICATION_JSON)
213 @Produces(MediaType.APPLICATION_JSON)
214 @ApiOperation(value="Create Port Mirroring Configuration",response=Response.class)
216 public Response createPortConfiguration(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
217 String requestId = getRequestId(requestContext);
218 HashMap<String, String> instanceIdMap = new HashMap<>();
219 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
220 return configurationRecipeLookup(request, Action.createInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
224 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}")
225 @Consumes(MediaType.APPLICATION_JSON)
226 @Produces(MediaType.APPLICATION_JSON)
227 @ApiOperation(value="Delete provided Port",response=Response.class)
229 public Response deletePortConfiguration(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
230 @PathParam("configurationInstanceId") String configurationInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
231 String requestId = getRequestId(requestContext);
232 HashMap<String, String> instanceIdMap = new HashMap<>();
233 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
234 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
235 return configurationRecipeLookup(request, Action.deleteInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
239 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/enablePort")
240 @Consumes(MediaType.APPLICATION_JSON)
241 @Produces(MediaType.APPLICATION_JSON)
242 @ApiOperation(value="Enable Port Mirroring",response=Response.class)
244 public Response enablePort(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
245 @PathParam("configurationInstanceId") String configurationInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
246 String requestId = getRequestId(requestContext);
247 HashMap<String, String> instanceIdMap = new HashMap<>();
248 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
249 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
250 return configurationRecipeLookup(request, Action.enablePort, instanceIdMap, version, requestId, getRequestUri(requestContext));
254 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/disablePort")
255 @Consumes(MediaType.APPLICATION_JSON)
256 @Produces(MediaType.APPLICATION_JSON)
257 @ApiOperation(value="Disable Port Mirroring",response=Response.class)
259 public Response disablePort(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
260 @PathParam("configurationInstanceId") String configurationInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
261 String requestId = getRequestId(requestContext);
262 HashMap<String, String> instanceIdMap = new HashMap<>();
263 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
264 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
265 return configurationRecipeLookup(request, Action.disablePort, instanceIdMap, version, requestId, getRequestUri(requestContext));
269 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/activate")
270 @Consumes(MediaType.APPLICATION_JSON)
271 @Produces(MediaType.APPLICATION_JSON)
272 @ApiOperation(value="Activate Port Mirroring",response=Response.class)
274 public Response activatePort(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
275 @PathParam("configurationInstanceId") String configurationInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
276 String requestId = getRequestId(requestContext);
277 HashMap<String, String> instanceIdMap = new HashMap<>();
278 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
279 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
280 return configurationRecipeLookup(request, Action.activateInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
284 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/deactivate")
285 @Consumes(MediaType.APPLICATION_JSON)
286 @Produces(MediaType.APPLICATION_JSON)
287 @ApiOperation(value="Deactivate Port Mirroring",response=Response.class)
289 public Response deactivatePort(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
290 @PathParam("configurationInstanceId") String configurationInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
291 String requestId = getRequestId(requestContext);
292 HashMap<String, String> instanceIdMap = new HashMap<>();
293 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
294 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
295 return configurationRecipeLookup(request, Action.deactivateInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
299 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/addRelationships")
300 @Consumes(MediaType.APPLICATION_JSON)
301 @Produces(MediaType.APPLICATION_JSON)
302 @ApiOperation(value="Add Relationships to a Service Instance",response=Response.class)
304 public Response addRelationships(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
305 String requestId = getRequestId(requestContext);
306 HashMap<String, String> instanceIdMap = new HashMap<>();
307 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
308 return configurationRecipeLookup(request, Action.addRelationships, instanceIdMap, version, requestId, getRequestUri(requestContext));
312 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/removeRelationships")
313 @Consumes(MediaType.APPLICATION_JSON)
314 @Produces(MediaType.APPLICATION_JSON)
315 @ApiOperation(value="Remove Relationships from Service Instance",response=Response.class)
317 public Response removeRelationships(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
318 String requestId = getRequestId(requestContext);
319 HashMap<String, String> instanceIdMap = new HashMap<>();
320 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
321 return configurationRecipeLookup(request, Action.removeRelationships, instanceIdMap, version, requestId, getRequestUri(requestContext));
325 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs")
326 @Consumes(MediaType.APPLICATION_JSON)
327 @Produces(MediaType.APPLICATION_JSON)
328 @ApiOperation(value="Create VNF on a specified version and serviceInstance",response=Response.class)
330 public Response createVnfInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
331 String requestId = getRequestId(requestContext);
332 HashMap<String, String> instanceIdMap = new HashMap<>();
333 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
334 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
338 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/replace")
339 @Consumes(MediaType.APPLICATION_JSON)
340 @Produces(MediaType.APPLICATION_JSON)
341 @ApiOperation(value="Replace provided VNF instance",response=Response.class)
343 public Response replaceVnfInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
344 @PathParam("vnfInstanceId") String vnfInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
345 String requestId = getRequestId(requestContext);
346 HashMap<String, String> instanceIdMap = new HashMap<>();
347 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
348 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
349 return serviceInstances(request, Action.replaceInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
353 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}")
354 @Consumes(MediaType.APPLICATION_JSON)
355 @Produces(MediaType.APPLICATION_JSON)
356 @ApiOperation(value="Update VNF on a specified version, serviceInstance and vnfInstance",response=Response.class)
358 public Response updateVnfInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
359 @PathParam("vnfInstanceId") String vnfInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
360 String requestId = getRequestId(requestContext);
361 HashMap<String, String> instanceIdMap = new HashMap<>();
362 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
363 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
364 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
368 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/applyUpdatedConfig")
369 @Consumes(MediaType.APPLICATION_JSON)
370 @Produces(MediaType.APPLICATION_JSON)
371 @ApiOperation(value="Apply updated configuration",response=Response.class)
372 public Response applyUpdatedConfig(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
373 @PathParam("vnfInstanceId") String vnfInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
374 String requestId = getRequestId(requestContext);
375 HashMap<String, String> instanceIdMap = new HashMap<>();
376 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
377 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
378 return serviceInstances(request, Action.applyUpdatedConfig, instanceIdMap, version, requestId, getRequestUri(requestContext));
382 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/recreate")
383 @Consumes(MediaType.APPLICATION_JSON)
384 @Produces(MediaType.APPLICATION_JSON)
385 @ApiOperation(value="Recreate VNF Instance",response=Response.class)
386 public Response recreateVnfInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
387 @PathParam("vnfInstanceId") String vnfInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
388 String requestId = getRequestId(requestContext);
389 HashMap<String, String> instanceIdMap = new HashMap<>();
390 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
391 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
392 return serviceInstances(request, Action.recreateInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
397 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}")
398 @Consumes(MediaType.APPLICATION_JSON)
399 @Produces(MediaType.APPLICATION_JSON)
400 @ApiOperation(value="Delete provided VNF instance",response=Response.class)
402 public Response deleteVnfInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
403 @PathParam("vnfInstanceId") String vnfInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
404 String requestId = getRequestId(requestContext);
405 HashMap<String, String> instanceIdMap = new HashMap<>();
406 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
407 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
408 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
412 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules")
413 @Consumes(MediaType.APPLICATION_JSON)
414 @Produces(MediaType.APPLICATION_JSON)
415 @ApiOperation(value="Create VfModule on a specified version, serviceInstance and vnfInstance",response=Response.class)
417 public Response createVfModuleInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
418 @PathParam("vnfInstanceId") String vnfInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
419 String requestId = getRequestId(requestContext);
420 HashMap<String, String> instanceIdMap = new HashMap<>();
421 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
422 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
423 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
427 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/replace")
428 @Consumes(MediaType.APPLICATION_JSON)
429 @Produces(MediaType.APPLICATION_JSON)
430 @ApiOperation(value="Create VfModule on a specified version, serviceInstance and vnfInstance",response=Response.class)
432 public Response replaceVfModuleInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
433 @PathParam("vnfInstanceId") String vnfInstanceId,
434 @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
435 String requestId = getRequestId(requestContext);
436 HashMap<String, String> instanceIdMap = new HashMap<>();
437 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
438 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
439 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
440 return serviceInstances(request, Action.replaceInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
444 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}")
445 @Consumes(MediaType.APPLICATION_JSON)
446 @Produces(MediaType.APPLICATION_JSON)
447 @ApiOperation(value="Update VfModule on a specified version, serviceInstance, vnfInstance and vfModule",response=Response.class)
449 public Response updateVfModuleInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
450 @PathParam("vnfInstanceId") String vnfInstanceId,
451 @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
452 String requestId = getRequestId(requestContext);
453 HashMap<String, String> instanceIdMap = new HashMap<>();
454 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
455 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
456 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
457 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
461 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/inPlaceSoftwareUpdate")
462 @Consumes(MediaType.APPLICATION_JSON)
463 @Produces(MediaType.APPLICATION_JSON)
464 @ApiOperation(value="Perform VNF software update",response=Response.class)
466 public Response inPlaceSoftwareUpdate(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
467 @PathParam("vnfInstanceId") String vnfInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
468 String requestId = getRequestId(requestContext);
469 HashMap<String, String> instanceIdMap = new HashMap<>();
470 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
471 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
472 return serviceInstances(request, Action.inPlaceSoftwareUpdate, instanceIdMap, version, requestId, getRequestUri(requestContext));
476 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}")
477 @Consumes(MediaType.APPLICATION_JSON)
478 @Produces(MediaType.APPLICATION_JSON)
479 @ApiOperation(value="Delete provided VfModule instance",response=Response.class)
481 public Response deleteVfModuleInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
482 @PathParam("vnfInstanceId") String vnfInstanceId,
483 @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
484 String requestId = getRequestId(requestContext);
485 HashMap<String, String> instanceIdMap = new HashMap<>();
486 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
487 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
488 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
489 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
493 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/deactivateAndCloudDelete")
494 @Consumes(MediaType.APPLICATION_JSON)
495 @Produces(MediaType.APPLICATION_JSON)
496 @ApiOperation(value="Deactivate and Cloud Delete VfModule instance",response=Response.class)
498 public Response deactivateAndCloudDeleteVfModuleInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
499 @PathParam("vnfInstanceId") String vnfInstanceId, @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
500 String requestId = getRequestId(requestContext);
501 HashMap<String, String> instanceIdMap = new HashMap<>();
502 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
503 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
504 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
505 Response response = serviceInstances(request, Action.deactivateAndCloudDelete, instanceIdMap, version, requestId, getRequestUri(requestContext));
510 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/scaleOut")
511 @Consumes(MediaType.APPLICATION_JSON)
512 @Produces(MediaType.APPLICATION_JSON)
513 @ApiOperation(value="VF Auto Scale Out",response=Response.class)
515 public Response scaleOutVfModule(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
516 @PathParam("vnfInstanceId") String vnfInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
517 String requestId = getRequestId(requestContext);
518 HashMap<String, String> instanceIdMap = new HashMap<>();
519 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
520 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
521 return serviceInstances(request, Action.scaleOut, instanceIdMap, version, requestId, getRequestUri(requestContext));
526 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups")
527 @Consumes(MediaType.APPLICATION_JSON)
528 @Produces(MediaType.APPLICATION_JSON)
529 @ApiOperation(value="Create VolumeGroup on a specified version, serviceInstance, vnfInstance",response=Response.class)
531 public Response createVolumeGroupInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
532 @PathParam("vnfInstanceId") String vnfInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
533 String requestId = getRequestId(requestContext);
534 HashMap<String, String> instanceIdMap = new HashMap<>();
535 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
536 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
537 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
541 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}")
542 @Consumes(MediaType.APPLICATION_JSON)
543 @Produces(MediaType.APPLICATION_JSON)
544 @ApiOperation(value="Update VolumeGroup on a specified version, serviceInstance, vnfInstance and volumeGroup",response=Response.class)
546 public Response updateVolumeGroupInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
547 @PathParam("vnfInstanceId") String vnfInstanceId,
548 @PathParam("volumeGroupInstanceId") String volumeGroupInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
549 String requestId = getRequestId(requestContext);
550 HashMap<String, String> instanceIdMap = new HashMap<>();
551 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
552 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
553 instanceIdMap.put("volumeGroupInstanceId", volumeGroupInstanceId);
554 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
558 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}")
559 @Consumes(MediaType.APPLICATION_JSON)
560 @Produces(MediaType.APPLICATION_JSON)
561 @ApiOperation(value="Delete provided VolumeGroup instance",response=Response.class)
563 public Response deleteVolumeGroupInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
564 @PathParam("vnfInstanceId") String vnfInstanceId,
565 @PathParam("volumeGroupInstanceId") String volumeGroupInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
566 String requestId = getRequestId(requestContext);
567 HashMap<String, String> instanceIdMap = new HashMap<>();
568 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
569 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
570 instanceIdMap.put("volumeGroupInstanceId", volumeGroupInstanceId);
571 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
575 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks")
576 @Consumes(MediaType.APPLICATION_JSON)
577 @Produces(MediaType.APPLICATION_JSON)
578 @ApiOperation(value="Create NetworkInstance on a specified version and serviceInstance ",response=Response.class)
580 public Response createNetworkInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
581 String requestId = getRequestId(requestContext);
582 HashMap<String, String> instanceIdMap = new HashMap<>();
583 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
584 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
588 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks/{networkInstanceId}")
589 @Consumes(MediaType.APPLICATION_JSON)
590 @Produces(MediaType.APPLICATION_JSON)
591 @ApiOperation(value="Update VolumeGroup on a specified version, serviceInstance, networkInstance",response=Response.class)
593 public Response updateNetworkInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
594 @PathParam("networkInstanceId") String networkInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
595 String requestId = getRequestId(requestContext);
596 HashMap<String, String> instanceIdMap = new HashMap<>();
597 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
598 instanceIdMap.put("networkInstanceId", networkInstanceId);
599 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
603 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks/{networkInstanceId}")
604 @Consumes(MediaType.APPLICATION_JSON)
605 @Produces(MediaType.APPLICATION_JSON)
606 @ApiOperation(value="Delete provided Network instance",response=Response.class)
608 public Response deleteNetworkInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
609 @PathParam("networkInstanceId") String networkInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
610 String requestId = getRequestId(requestContext);
611 HashMap<String, String> instanceIdMap = new HashMap<>();
612 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
613 instanceIdMap.put("networkInstanceId", networkInstanceId);
614 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
618 @Path("/{version:[vV][7]}/instanceGroups")
619 @Consumes(MediaType.APPLICATION_JSON)
620 @Produces(MediaType.APPLICATION_JSON)
621 @ApiOperation(value="Create instanceGroups",response=Response.class)
623 public Response createInstanceGroups(String request, @PathParam("version") String version, @Context ContainerRequestContext requestContext) throws ApiException {
624 String requestId = getRequestId(requestContext);
625 return serviceInstances(request, Action.createInstance, null, version, requestId, getRequestUri(requestContext));
629 @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}")
630 @Consumes(MediaType.APPLICATION_JSON)
631 @Produces(MediaType.APPLICATION_JSON)
632 @ApiOperation(value="Delete instanceGroup",response=Response.class)
634 public Response deleteInstanceGroups(@PathParam("version") String version, @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext) throws ApiException {
635 String requestId = getRequestId(requestContext);
636 HashMap<String, String> instanceIdMap = new HashMap<>();
637 instanceIdMap.put(CommonConstants.INSTANCE_GROUP_ID, instanceGroupId);
638 return deleteInstanceGroups(Action.deleteInstance, instanceIdMap, version, requestId, getRequestUri(requestContext), requestContext);
642 @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}/addMembers")
643 @Consumes(MediaType.APPLICATION_JSON)
644 @Produces(MediaType.APPLICATION_JSON)
645 @ApiOperation(value="Add instanceGroup members",response=Response.class)
647 public Response addInstanceGroupMembers(String request, @PathParam("version") String version, @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext) throws ApiException {
648 String requestId = getRequestId(requestContext);
649 HashMap<String, String> instanceIdMap = new HashMap<>();
650 instanceIdMap.put(CommonConstants.INSTANCE_GROUP_ID, instanceGroupId);
651 return serviceInstances(request, Action.addMembers, instanceIdMap, version, requestId, getRequestUri(requestContext));
655 @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}/removeMembers")
656 @Consumes(MediaType.APPLICATION_JSON)
657 @Produces(MediaType.APPLICATION_JSON)
658 @ApiOperation(value="Remove instanceGroup members",response=Response.class)
660 public Response removeInstanceGroupMembers(String request, @PathParam("version") String version, @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext) throws ApiException {
661 String requestId = getRequestId(requestContext);
662 HashMap<String, String> instanceIdMap = new HashMap<>();
663 instanceIdMap.put(CommonConstants.INSTANCE_GROUP_ID, instanceGroupId);
664 return serviceInstances(request, Action.removeMembers, instanceIdMap, version, requestId, getRequestUri(requestContext));
667 public String getRequestUri(ContainerRequestContext context){
668 String requestUri = context.getUriInfo().getPath();
669 requestUri = requestUri.substring(requestUri.indexOf("/serviceInstantiation/") + 22);
673 public void validateHeaders(ContainerRequestContext context) throws ValidationException{
674 MultivaluedMap<String, String> headers = context.getHeaders();
675 if(!headers.containsKey(ONAPLogConstants.Headers.REQUEST_ID)){
676 throw new ValidationException(ONAPLogConstants.Headers.REQUEST_ID + " header", true);
678 if(!headers.containsKey(ONAPLogConstants.Headers.PARTNER_NAME)){
679 throw new ValidationException(ONAPLogConstants.Headers.PARTNER_NAME + " header", true);
681 if(!headers.containsKey(MsoLogger.REQUESTOR_ID)){
682 throw new ValidationException(MsoLogger.REQUESTOR_ID + " header", true);
686 public Response serviceInstances(String requestJSON, Actions action, HashMap<String, String> instanceIdMap, String version, String requestId, String requestUri) throws ApiException {
687 String serviceInstanceId = (instanceIdMap ==null)? null:instanceIdMap.get("serviceInstanceId");
688 Boolean aLaCarte = null;
689 long startTime = System.currentTimeMillis ();
690 ServiceInstancesRequest sir = null;
691 String apiVersion = version.substring(1);
693 sir = convertJsonToServiceInstanceRequest(requestJSON, action, startTime, sir, msoRequest, requestId, requestUri);
694 String requestScope = deriveRequestScope(action, sir, requestUri);
695 InfraActiveRequests currentActiveReq = msoRequest.createRequestObject (sir, action, requestId, Status.IN_PROGRESS, requestJSON, requestScope);
696 if(sir.getRequestDetails().getRequestParameters() != null){
697 aLaCarte = sir.getRequestDetails().getRequestParameters().getALaCarte();
699 parseRequest(sir, instanceIdMap, action, version, requestJSON, aLaCarte, requestId, currentActiveReq);
700 setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
702 int requestVersion = Integer.parseInt(version.substring(1));
703 String instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();
704 boolean alaCarteFlag = msoRequest.getAlacarteFlag(sir);
705 String vnfType = msoRequest.getVnfType(sir,requestScope,action,requestVersion);
706 String networkType = msoRequest.getNetworkType(sir,requestScope);
707 String sdcServiceModelVersion = msoRequest.getSDCServiceModelVersion(sir);
708 String serviceInstanceType = msoRequest.getServiceInstanceType(sir,requestScope);
709 String vfModuleType = msoRequest.getVfModuleType(sir,requestScope,action,requestVersion);
711 if(requestScope.equalsIgnoreCase(ModelType.vnf.name()) && vnfType != null){
712 currentActiveReq.setVnfType(vnfType);
713 }else if(requestScope.equalsIgnoreCase(ModelType.network.name()) && networkType != null){
714 currentActiveReq.setNetworkType(networkType);
717 InfraActiveRequests dup = null;
720 dup = duplicateCheck(action, instanceIdMap, startTime, msoRequest, instanceName,requestScope, currentActiveReq);
723 buildErrorOnDuplicateRecord(currentActiveReq, action, instanceIdMap, startTime, msoRequest, instanceName, requestScope, dup);
725 ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
727 RequestReferences referencesResponse = new RequestReferences();
729 referencesResponse.setRequestId(requestId);
731 serviceResponse.setRequestReferences(referencesResponse);
732 Boolean isBaseVfModule = false;
734 RecipeLookupResult recipeLookupResult = getServiceInstanceOrchestrationURI(sir, action, alaCarteFlag, currentActiveReq);
737 ModelInfo modelInfo = sir.getRequestDetails().getModelInfo();
738 if (action == Action.applyUpdatedConfig || action == Action.inPlaceSoftwareUpdate) {
739 modelType = ModelType.vnf;
740 }else if(action == Action.addMembers || action == Action.removeMembers){
741 modelType = ModelType.instanceGroup;
743 modelType =modelInfo.getModelType();
746 if (modelType.equals(ModelType.vfModule)) {
749 // Get VF Module-specific base module indicator
752 String modelVersionId = modelInfo.getModelVersionId();
754 if(modelVersionId != null) {
755 vfm = catalogDbClient.getVfModuleByModelUUID(modelVersionId);
756 } else if(modelInfo.getModelInvariantId() != null && modelInfo.getModelVersion() != null){
757 vfm = catalogDbClient.getVfModuleByModelInvariantUUIDAndModelVersion(modelInfo.getModelInvariantId(), modelInfo.getModelVersion());
761 if (vfm.getIsBase()) {
762 isBaseVfModule = true;
764 } else if (action == Action.createInstance || action == Action.updateInstance) {
765 // There is no entry for this vfModuleType with this version, if specified, in VF_MODULE table in Catalog DB.
766 // This request cannot proceed
768 String serviceVersionText = "";
769 if (sdcServiceModelVersion != null && !sdcServiceModelVersion.isEmpty ()) {
770 serviceVersionText = " with version " + sdcServiceModelVersion;
773 String errorMessage = "VnfType " + vnfType + " and VF Module Model Name " + modelInfo.getModelName() + serviceVersionText + " not found in MSO Catalog DB";
774 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, MsoLogger.ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
775 VfModuleNotFoundException vfModuleException = new VfModuleNotFoundException.Builder(errorMessage, HttpStatus.SC_NOT_FOUND, ErrorNumbers.SVC_BAD_PARAMETER).errorInfo(errorLoggerInfo).build();
776 updateStatus(currentActiveReq, Status.FAILED, vfModuleException.getMessage());
778 throw vfModuleException;
783 serviceInstanceId = "";
785 String vfModuleId = "";
786 String volumeGroupId = "";
787 String networkId = "";
788 String correlationId = "";
789 String instanceGroupId = null;
790 if(sir.getServiceInstanceId () != null){
791 serviceInstanceId = sir.getServiceInstanceId ();
794 if(sir.getVnfInstanceId () != null){
795 vnfId = sir.getVnfInstanceId ();
798 if(sir.getVfModuleInstanceId () != null){
799 vfModuleId = sir.getVfModuleInstanceId ();
802 if(sir.getVolumeGroupInstanceId () != null){
803 volumeGroupId = sir.getVolumeGroupInstanceId ();
806 if(sir.getNetworkInstanceId () != null){
807 networkId = sir.getNetworkInstanceId ();
809 if(sir.getInstanceGroupId() != null){
810 instanceGroupId = sir.getInstanceGroupId();
813 correlationId = getCorrelationId(sir);
816 infraActiveRequestsClient.save(currentActiveReq);
818 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, MsoLogger.ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
819 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e)
820 .errorInfo(errorLoggerInfo).build();
823 if(!requestScope.equalsIgnoreCase(ModelType.service.name()) && action != Action.recreateInstance){
825 }else if(aLaCarte == null){
829 RequestClientParameter requestClientParameter = null;
831 requestClientParameter = new RequestClientParameter.Builder()
832 .setRequestId(requestId)
833 .setBaseVfModule(isBaseVfModule)
834 .setRecipeTimeout(recipeLookupResult.getRecipeTimeout())
835 .setRequestAction(action.toString())
836 .setServiceInstanceId(serviceInstanceId)
837 .setCorrelationId(correlationId)
839 .setVfModuleId(vfModuleId)
840 .setVolumeGroupId(volumeGroupId)
841 .setNetworkId(networkId)
842 .setServiceType(serviceInstanceType)
844 .setVfModuleType(vfModuleType)
845 .setNetworkType(networkType)
846 .setRequestDetails(mapJSONtoMSOStyle(requestJSON, sir, aLaCarte, action))
847 .setApiVersion(apiVersion)
848 .setALaCarte(aLaCarte)
849 .setRequestUri(requestUri)
850 .setInstanceGroupId(instanceGroupId).build();
851 } catch (IOException e) {
852 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
853 throw new ValidateException.Builder("Unable to generate RequestClientParamter object" + e.getMessage(), HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER)
854 .errorInfo(errorLoggerInfo).build();
856 return postBPELRequest(currentActiveReq, requestClientParameter, recipeLookupResult.getOrchestrationURI(), requestScope);
858 public Response deleteInstanceGroups(Actions action, HashMap<String, String> instanceIdMap, String version, String requestId, String requestUri, ContainerRequestContext requestContext) throws ApiException {
859 String instanceGroupId = instanceIdMap.get(CommonConstants.INSTANCE_GROUP_ID);
860 Boolean aLaCarte = true;
861 long startTime = System.currentTimeMillis ();
862 String apiVersion = version.substring(1);
863 ServiceInstancesRequest sir = new ServiceInstancesRequest();
864 sir.setInstanceGroupId(instanceGroupId);
866 String requestScope = ModelType.instanceGroup.toString();
867 InfraActiveRequests currentActiveReq = msoRequest.createRequestObject (sir, action, requestId, Status.IN_PROGRESS, null, requestScope);
868 setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
870 validateHeaders(requestContext);
871 } catch (ValidationException e) {
873 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_VALIDATION_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
874 ValidateException validateException = new ValidateException.Builder(e.getMessage(), HttpStatus.SC_BAD_REQUEST, ErrorNumbers.SVC_BAD_PARAMETER).cause(e)
875 .errorInfo(errorLoggerInfo).build();
876 updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
877 throw validateException;
880 InfraActiveRequests dup = duplicateCheck(action, instanceIdMap, startTime, msoRequest, null, requestScope, currentActiveReq);
883 buildErrorOnDuplicateRecord(currentActiveReq, action, instanceIdMap, startTime, msoRequest, null, requestScope, dup);
886 ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
888 RequestReferences referencesResponse = new RequestReferences();
890 referencesResponse.setRequestId(requestId);
892 serviceResponse.setRequestReferences(referencesResponse);
893 Boolean isBaseVfModule = false;
895 RecipeLookupResult recipeLookupResult = new RecipeLookupResult("/mso/async/services/WorkflowActionBB", 180);
898 infraActiveRequestsClient.save(currentActiveReq);
900 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, MsoLogger.ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
901 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e)
902 .errorInfo(errorLoggerInfo).build();
905 RequestClientParameter requestClientParameter = new RequestClientParameter.Builder()
906 .setRequestId(requestId)
907 .setBaseVfModule(isBaseVfModule)
908 .setRecipeTimeout(recipeLookupResult.getRecipeTimeout())
909 .setRequestAction(action.toString())
910 .setApiVersion(apiVersion)
911 .setALaCarte(aLaCarte)
912 .setRequestUri(requestUri)
913 .setInstanceGroupId(instanceGroupId).build();
915 return postBPELRequest(currentActiveReq, requestClientParameter, recipeLookupResult.getOrchestrationURI(), requestScope);
918 private String getCorrelationId(ServiceInstancesRequest sir) {
919 return Optional.of(sir)
920 .map(ServiceInstancesRequest::getRequestDetails)
921 .map(RequestDetails::getRequestParameters)
922 .map(parameters -> parameters.getUserParamValue("pnfId"))
926 private String deriveRequestScope(Actions action, ServiceInstancesRequest sir, String requestUri) {
927 if(action == Action.inPlaceSoftwareUpdate || action == Action.applyUpdatedConfig){
928 return (ModelType.vnf.name());
929 }else if(action == Action.addMembers || action == Action.removeMembers){
930 return(ModelType.instanceGroup.toString());
933 if(sir.getRequestDetails().getModelInfo().getModelType() == null){
934 requestScope = requestScopeFromUri(requestUri);
936 requestScope = sir.getRequestDetails().getModelInfo().getModelType().name();
941 private String requestScopeFromUri(String requestUri){
943 if(requestUri.contains(ModelType.network.name())){
944 requestScope = ModelType.network.name();
945 }else if(requestUri.contains(ModelType.vfModule.name())){
946 requestScope = ModelType.vfModule.name();
947 }else if(requestUri.contains(ModelType.volumeGroup.name())){
948 requestScope = ModelType.volumeGroup.name();
949 }else if(requestUri.contains(ModelType.configuration.name())){
950 requestScope = ModelType.configuration.name();
951 }else if(requestUri.contains(ModelType.vnf.name())){
952 requestScope = ModelType.vnf.name();
954 requestScope = ModelType.service.name();
958 private Response postBPELRequest(InfraActiveRequests currentActiveReq, RequestClientParameter requestClientParameter, String orchestrationUri, String requestScope)throws ApiException {
959 RequestClient requestClient = null;
960 HttpResponse response = null;
962 requestClient = reqClientFactory.getRequestClient (orchestrationUri);
963 response = requestClient.post(requestClientParameter);
964 } catch (Exception e) {
966 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MsoLogger.ErrorCode.AvailabilityError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
967 String url = requestClient != null ? requestClient.getUrl() : "";
968 ClientConnectionException clientException = new ClientConnectionException.Builder(url, HttpStatus.SC_BAD_GATEWAY, ErrorNumbers.SVC_NO_SERVER_RESOURCES).cause(e).errorInfo(errorLoggerInfo).build();
969 updateStatus(currentActiveReq, Status.FAILED, clientException.getMessage());
971 throw clientException;
974 if (response == null) {
976 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MsoLogger.ErrorCode.BusinessProcesssError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
977 ClientConnectionException clientException = new ClientConnectionException.Builder(requestClient.getUrl(), HttpStatus.SC_BAD_GATEWAY, ErrorNumbers.SVC_NO_SERVER_RESOURCES).errorInfo(errorLoggerInfo).build();
979 updateStatus(currentActiveReq, Status.FAILED, clientException.getMessage());
981 throw clientException;
984 ResponseHandler respHandler = null;
985 int bpelStatus = 500;
987 respHandler = new ResponseHandler (response, requestClient.getType ());
988 bpelStatus = respHandler.getStatus ();
989 } catch (ApiException e) {
991 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
992 ValidateException validateException = new ValidateException.Builder("Exception caught mapping Camunda JSON response to object", HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER).cause(e)
993 .errorInfo(errorLoggerInfo).build();
994 updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
995 throw validateException;
998 // BPEL accepted the request, the request is in progress
999 if (bpelStatus == HttpStatus.SC_ACCEPTED) {
1000 ServiceInstancesResponse jsonResponse;
1001 CamundaResponse camundaResp = respHandler.getResponse();
1003 if("Success".equalsIgnoreCase(camundaResp.getMessage())) {
1005 ObjectMapper mapper = new ObjectMapper();
1006 jsonResponse = mapper.readValue(camundaResp.getResponse(), ServiceInstancesResponse.class);
1007 jsonResponse.getRequestReferences().setRequestId(requestClientParameter.getRequestId());
1008 Optional<URL> selfLinkUrl = msoRequest.buildSelfLinkUrl(currentActiveReq.getRequestUrl(), requestClientParameter.getRequestId());
1009 if(selfLinkUrl.isPresent()){
1010 jsonResponse.getRequestReferences().setRequestSelfLink(selfLinkUrl.get());
1012 jsonResponse.getRequestReferences().setRequestSelfLink(null);
1014 } catch (IOException e) {
1016 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1017 ValidateException validateException = new ValidateException.Builder("Exception caught mapping Camunda JSON response to object", HttpStatus.SC_NOT_ACCEPTABLE, ErrorNumbers.SVC_BAD_PARAMETER).cause(e)
1018 .errorInfo(errorLoggerInfo).build();
1019 updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1020 throw validateException;
1022 return builder.buildResponse(HttpStatus.SC_ACCEPTED, requestClientParameter.getRequestId(), jsonResponse, requestClientParameter.getApiVersion());
1026 List<String> variables = new ArrayList<>();
1027 variables.add(bpelStatus + "");
1028 String camundaJSONResponseBody = respHandler.getResponseBody ();
1029 if (camundaJSONResponseBody != null && !camundaJSONResponseBody.isEmpty ()) {
1031 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, MsoLogger.ErrorCode.BusinessProcesssError).errorSource(requestClient.getUrl()).build();
1032 BPMNFailureException bpmnException = new BPMNFailureException.Builder(String.valueOf(bpelStatus) + camundaJSONResponseBody, bpelStatus, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR)
1033 .errorInfo(errorLoggerInfo).build();
1035 updateStatus(currentActiveReq, Status.FAILED, bpmnException.getMessage());
1037 throw bpmnException;
1040 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, MsoLogger.ErrorCode.BusinessProcesssError).errorSource(requestClient.getUrl()).build();
1043 BPMNFailureException servException = new BPMNFailureException.Builder(String.valueOf(bpelStatus), bpelStatus, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR)
1044 .errorInfo(errorLoggerInfo).build();
1045 updateStatus(currentActiveReq, Status.FAILED, servException.getMessage());
1047 throw servException;
1051 private void setInstanceId(InfraActiveRequests currentActiveReq, String requestScope, String instanceId, Map<String, String> instanceIdMap) {
1052 if(StringUtils.isNotBlank(instanceId)) {
1053 if(ModelType.service.name().equalsIgnoreCase(requestScope)) {
1054 currentActiveReq.setServiceInstanceId(instanceId);
1055 } else if(ModelType.vnf.name().equalsIgnoreCase(requestScope)) {
1056 currentActiveReq.setVnfId(instanceId);
1057 } else if(ModelType.vfModule.name().equalsIgnoreCase(requestScope)) {
1058 currentActiveReq.setVfModuleId(instanceId);
1059 } else if(ModelType.volumeGroup.name().equalsIgnoreCase(requestScope)) {
1060 currentActiveReq.setVolumeGroupId(instanceId);
1061 } else if(ModelType.network.name().equalsIgnoreCase(requestScope)) {
1062 currentActiveReq.setNetworkId(instanceId);
1063 } else if(ModelType.configuration.name().equalsIgnoreCase(requestScope)) {
1064 currentActiveReq.setConfigurationId(instanceId);
1065 }else if(ModelType.instanceGroup.toString().equalsIgnoreCase(requestScope)){
1066 currentActiveReq.setInstanceGroupId(instanceId);
1068 } else if(instanceIdMap != null && !instanceIdMap.isEmpty()) {
1069 if(instanceIdMap.get("serviceInstanceId") != null){
1070 currentActiveReq.setServiceInstanceId(instanceIdMap.get("serviceInstanceId"));
1072 if(instanceIdMap.get("vnfInstanceId") != null){
1073 currentActiveReq.setVnfId(instanceIdMap.get("vnfInstanceId"));
1075 if(instanceIdMap.get("vfModuleInstanceId") != null){
1076 currentActiveReq.setVfModuleId(instanceIdMap.get("vfModuleInstanceId"));
1078 if(instanceIdMap.get("volumeGroupInstanceId") != null){
1079 currentActiveReq.setVolumeGroupId(instanceIdMap.get("volumeGroupInstanceId"));
1081 if(instanceIdMap.get("networkInstanceId") != null){
1082 currentActiveReq.setNetworkId(instanceIdMap.get("networkInstanceId"));
1084 if(instanceIdMap.get("configurationInstanceId") != null){
1085 currentActiveReq.setConfigurationId(instanceIdMap.get("configurationInstanceId"));
1087 if(instanceIdMap.get("InstanceGroupInstanceId") != null){
1088 currentActiveReq.setInstanceGroupId(instanceIdMap.get("InstanceGroupInstanceId"));
1093 protected String mapJSONtoMSOStyle(String msoRawRequest, ServiceInstancesRequest serviceInstRequest, boolean isAlaCarte, Actions action) throws IOException {
1094 ObjectMapper mapper = new ObjectMapper();
1095 mapper.setSerializationInclusion(Include.NON_NULL);
1096 if(msoRawRequest != null){
1097 ServiceInstancesRequest sir = mapper.readValue(msoRawRequest, ServiceInstancesRequest.class);
1098 if( !isAlaCarte && Action.createInstance.equals(action) && serviceInstRequest != null &&
1099 serviceInstRequest.getRequestDetails() != null &&
1100 serviceInstRequest.getRequestDetails().getRequestParameters() != null) {
1101 sir.getRequestDetails().setCloudConfiguration(serviceInstRequest.getRequestDetails().getCloudConfiguration());
1102 sir.getRequestDetails().getRequestParameters().setUserParams(serviceInstRequest.getRequestDetails().getRequestParameters().getUserParams());
1104 msoLogger.debug("Value as string: " + mapper.writeValueAsString(sir));
1105 return mapper.writeValueAsString(sir);
1110 private void buildErrorOnDuplicateRecord(InfraActiveRequests currentActiveReq, Actions action, HashMap<String, String> instanceIdMap, long startTime, MsoRequest msoRequest,
1111 String instanceName, String requestScope, InfraActiveRequests dup) throws ApiException {
1113 // Found the duplicate record. Return the appropriate error.
1114 String instance = null;
1115 if(instanceName != null){
1116 instance = instanceName;
1118 instance = instanceIdMap.get(requestScope + "InstanceId");
1120 //List<String> variables = new ArrayList<String>();
1121 //variables.add(dup.getRequestStatus());
1122 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DUPLICATE_FOUND, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1125 DuplicateRequestException dupException = new DuplicateRequestException.Builder(requestScope,instance,dup.getRequestStatus(),dup.getRequestId(), HttpStatus.SC_CONFLICT, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR)
1126 .errorInfo(errorLoggerInfo).build();
1128 updateStatus(currentActiveReq, Status.FAILED, dupException.getMessage());
1133 private InfraActiveRequests duplicateCheck(Actions action, HashMap<String, String> instanceIdMap, long startTime,
1134 MsoRequest msoRequest, String instanceName, String requestScope, InfraActiveRequests currentActiveReq) throws ApiException {
1135 InfraActiveRequests dup = null;
1137 if(!(instanceName==null && requestScope.equals("service") && (action == Action.createInstance || action == Action.activateInstance || action == Action.assignInstance))){
1138 dup = infraActiveRequestsClient.checkInstanceNameDuplicate (instanceIdMap, instanceName, requestScope);
1140 } catch (Exception e) {
1141 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DUPLICATE_CHECK_EXC, MsoLogger.ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1142 RequestDbFailureException requestDbFailureException = new RequestDbFailureException.Builder("check for duplicate instance", e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e)
1143 .errorInfo(errorLoggerInfo).build();
1144 updateStatus(currentActiveReq, Status.FAILED, requestDbFailureException.getMessage());
1145 throw requestDbFailureException;
1150 private ServiceInstancesRequest convertJsonToServiceInstanceRequest(String requestJSON, Actions action, long startTime,
1151 ServiceInstancesRequest sir, MsoRequest msoRequest, String requestId, String requestUri) throws ApiException {
1153 ObjectMapper mapper = new ObjectMapper();
1154 return mapper.readValue(requestJSON, ServiceInstancesRequest.class);
1156 } catch (IOException e) {
1158 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1160 ValidateException validateException = new ValidateException.Builder("Error mapping request: " + e.getMessage(), HttpStatus.SC_BAD_REQUEST, ErrorNumbers.SVC_BAD_PARAMETER).cause(e)
1161 .errorInfo(errorLoggerInfo).build();
1162 String requestScope = requestScopeFromUri(requestUri);
1164 msoRequest.createErrorRequestRecord(Status.FAILED, requestId, validateException.getMessage(), action, requestScope, requestJSON);
1166 throw validateException;
1170 private void parseRequest(ServiceInstancesRequest sir, HashMap<String, String> instanceIdMap, Actions action, String version,
1171 String requestJSON, Boolean aLaCarte, String requestId, InfraActiveRequests currentActiveReq) throws ValidateException, RequestDbFailureException {
1172 int reqVersion = Integer.parseInt(version.substring(1));
1174 msoRequest.parse(sir, instanceIdMap, action, version, requestJSON, reqVersion, aLaCarte);
1175 } catch (Exception e) {
1176 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1177 ValidateException validateException = new ValidateException.Builder("Error parsing request: " + e.getMessage(), HttpStatus.SC_BAD_REQUEST, ErrorNumbers.SVC_BAD_PARAMETER).cause(e)
1178 .errorInfo(errorLoggerInfo).build();
1180 updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1182 throw validateException;
1186 private RecipeLookupResult getServiceInstanceOrchestrationURI(ServiceInstancesRequest sir, Actions action, boolean alaCarteFlag,
1187 InfraActiveRequests currentActiveReq) throws ApiException {
1188 RecipeLookupResult recipeLookupResult = null;
1189 //if the aLaCarte flag is set to TRUE, the API-H should choose the VID_DEFAULT recipe for the requested action
1190 ModelInfo modelInfo = sir.getRequestDetails().getModelInfo();
1191 // Query MSO Catalog DB
1193 if (action == Action.applyUpdatedConfig || action == Action.inPlaceSoftwareUpdate) {
1194 recipeLookupResult = getDefaultVnfUri(sir, action);
1195 }else if(action == Action.addMembers || action == Action.removeMembers){
1196 recipeLookupResult = new RecipeLookupResult("/mso/async/services/WorkflowActionBB", 180);
1197 }else if (modelInfo.getModelType().equals(ModelType.service)) {
1199 recipeLookupResult = getServiceURI(sir, action,alaCarteFlag);
1200 } catch (IOException e) {
1201 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1204 ValidateException validateException = new ValidateException.Builder(e.getMessage(), HttpStatus.SC_BAD_REQUEST, ErrorNumbers.SVC_BAD_PARAMETER).cause(e)
1205 .errorInfo(errorLoggerInfo).build();
1207 updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1209 throw validateException;
1211 } else if (modelInfo.getModelType().equals(ModelType.vfModule) ||
1212 modelInfo.getModelType().equals(ModelType.volumeGroup) || modelInfo.getModelType().equals(ModelType.vnf)) {
1214 recipeLookupResult = getVnfOrVfModuleUri( sir, action);
1215 } catch (ValidationException e) {
1216 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1219 ValidateException validateException = new ValidateException.Builder(e.getMessage(), HttpStatus.SC_BAD_REQUEST, ErrorNumbers.SVC_BAD_PARAMETER).cause(e)
1220 .errorInfo(errorLoggerInfo).build();
1222 updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1224 throw validateException;
1226 }else if (modelInfo.getModelType().equals(ModelType.network)) {
1228 recipeLookupResult = getNetworkUri( sir, action);
1229 } catch (ValidationException e) {
1231 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1234 ValidateException validateException = new ValidateException.Builder(e.getMessage(), HttpStatus.SC_BAD_REQUEST, ErrorNumbers.SVC_BAD_PARAMETER).cause(e)
1235 .errorInfo(errorLoggerInfo).build();
1236 updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1238 throw validateException;
1240 }else if(modelInfo.getModelType().equals(ModelType.instanceGroup)){
1241 recipeLookupResult = new RecipeLookupResult("/mso/async/services/WorkflowActionBB", 180);
1244 if (recipeLookupResult == null) {
1245 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, MsoLogger.ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1248 RecipeNotFoundException recipeNotFoundExceptionException = new RecipeNotFoundException.Builder("Recipe could not be retrieved from catalog DB.", HttpStatus.SC_NOT_FOUND, ErrorNumbers.SVC_GENERAL_SERVICE_ERROR)
1249 .errorInfo(errorLoggerInfo).build();
1251 updateStatus(currentActiveReq, Status.FAILED, recipeNotFoundExceptionException.getMessage());
1252 throw recipeNotFoundExceptionException;
1254 return recipeLookupResult;
1257 private RecipeLookupResult getServiceURI(ServiceInstancesRequest servInstReq, Actions action, boolean alaCarteFlag) throws IOException {
1259 // Construct the default service name
1260 // TODO need to make this a configurable property
1261 String defaultServiceModelName = getDefaultModel(servInstReq);
1262 RequestDetails requestDetails = servInstReq.getRequestDetails();
1263 ModelInfo modelInfo = requestDetails.getModelInfo();
1264 org.onap.so.db.catalog.beans.Service serviceRecord;
1265 List<org.onap.so.db.catalog.beans.Service> serviceRecordList;
1266 ServiceRecipe recipe = null;
1269 serviceRecord = catalogDbClient.getFirstByModelNameOrderByModelVersionDesc(defaultServiceModelName);
1270 if(serviceRecord !=null){
1271 recipe =catalogDbClient.getFirstByServiceModelUUIDAndAction(serviceRecord.getModelUUID(),action.toString());
1274 serviceRecord = catalogDbClient.getServiceByID(modelInfo.getModelVersionId());
1275 recipe = catalogDbClient.getFirstByServiceModelUUIDAndAction(modelInfo.getModelVersionId(), action.toString());
1276 if (recipe == null){
1277 serviceRecordList = catalogDbClient.getServiceByModelInvariantUUIDOrderByModelVersionDesc(modelInfo.getModelInvariantId());
1278 if(!serviceRecordList.isEmpty()){
1279 for(org.onap.so.db.catalog.beans.Service record : serviceRecordList){
1280 recipe = catalogDbClient.getFirstByServiceModelUUIDAndAction(record.getModelUUID(),action.toString());
1289 //if an aLaCarte flag was sent in the request, throw an error if the recipe was not found
1290 RequestParameters reqParam = requestDetails.getRequestParameters();
1291 if(reqParam!=null && alaCarteFlag && recipe==null){
1293 } else if(!alaCarteFlag && recipe != null && Action.createInstance.equals(action)) {
1294 mapToLegacyRequest(requestDetails);
1295 }else if (recipe == null) { //aLaCarte wasn't sent, so we'll try the default
1296 serviceRecord = catalogDbClient.getFirstByModelNameOrderByModelVersionDesc(defaultServiceModelName);
1297 recipe = catalogDbClient.getFirstByServiceModelUUIDAndAction(serviceRecord.getModelUUID(),action.toString());
1299 if(modelInfo.getModelVersionId() == null) {
1300 modelInfo.setModelVersionId(serviceRecord.getModelUUID());
1305 return new RecipeLookupResult (recipe.getOrchestrationUri (), recipe.getRecipeTimeout ());
1308 protected void mapToLegacyRequest(RequestDetails requestDetails) throws IOException {
1309 RequestParameters reqParam;
1310 if (requestDetails.getRequestParameters() == null) {
1311 reqParam = new RequestParameters();
1313 reqParam = requestDetails.getRequestParameters();
1315 if(requestDetails.getCloudConfiguration() == null) {
1316 CloudConfiguration cloudConfig = configureCloudConfig(reqParam);
1317 if(cloudConfig != null) {
1318 requestDetails.setCloudConfiguration(cloudConfig);
1322 List<Map<String, Object>> userParams = configureUserParams(reqParam);
1323 if(!userParams.isEmpty()) {
1324 if (reqParam == null) {
1325 requestDetails.setRequestParameters(new RequestParameters());
1327 requestDetails.getRequestParameters().setUserParams(userParams);
1331 protected CloudConfiguration configureCloudConfig(RequestParameters reqParams) throws IOException {
1333 for(Map<String, Object> params : reqParams.getUserParams()){
1334 if(params.containsKey("service")){
1335 Service service = serviceMapper(params);
1337 Optional<CloudConfiguration> targetConfiguration = addCloudConfig(service.getCloudConfiguration());
1339 if (targetConfiguration.isPresent()) {
1340 return targetConfiguration.get();
1342 for(Networks network : service.getResources().getNetworks()) {
1343 targetConfiguration = addCloudConfig(network.getCloudConfiguration());
1344 if(targetConfiguration.isPresent()) {
1345 return targetConfiguration.get();
1349 for(Vnfs vnf : service.getResources().getVnfs()) {
1350 targetConfiguration = addCloudConfig(vnf.getCloudConfiguration());
1352 if(targetConfiguration.isPresent()) {
1353 return targetConfiguration.get();
1356 for(VfModules vfModule : vnf.getVfModules()) {
1357 targetConfiguration = addCloudConfig(vfModule.getCloudConfiguration());
1359 if(targetConfiguration.isPresent()) {
1360 return targetConfiguration.get();
1371 private Optional<CloudConfiguration> addCloudConfig(CloudConfiguration sourceCloudConfiguration) {
1372 CloudConfiguration targetConfiguration = new CloudConfiguration();
1373 if(sourceCloudConfiguration != null) {
1374 targetConfiguration.setAicNodeClli(sourceCloudConfiguration.getAicNodeClli());
1375 targetConfiguration.setTenantId(sourceCloudConfiguration.getTenantId());
1376 targetConfiguration.setLcpCloudRegionId(sourceCloudConfiguration.getLcpCloudRegionId());
1377 targetConfiguration.setCloudOwner(sourceCloudConfiguration.getCloudOwner());
1378 return Optional.of(targetConfiguration);
1380 return Optional.empty();
1383 protected List<Map<String, Object>> configureUserParams(RequestParameters reqParams) throws IOException {
1384 msoLogger.debug("Configuring UserParams for Macro Request");
1385 Map<String, Object> userParams = new HashMap<>();
1387 for(Map<String, Object> params : reqParams.getUserParams()){
1388 if(params.containsKey("service")){
1389 Service service = serviceMapper(params);
1391 addUserParams(userParams, service.getInstanceParams());
1393 for(Networks network : service.getResources().getNetworks()) {
1394 addUserParams(userParams, network.getInstanceParams());
1397 for(Vnfs vnf: service.getResources().getVnfs()) {
1398 addUserParams(userParams, vnf.getInstanceParams());
1400 for(VfModules vfModule: vnf.getVfModules()) {
1401 addUserParams(userParams, vfModule.getInstanceParams());
1407 return mapFlatMapToNameValue(userParams);
1410 private Service serviceMapper(Map<String, Object> params)
1411 throws JsonProcessingException, IOException, JsonParseException, JsonMappingException {
1412 ObjectMapper obj = new ObjectMapper();
1413 String input = obj.writeValueAsString(params.get("service"));
1414 return obj.readValue(input, Service.class);
1417 private void addUserParams(Map<String, Object> targetUserParams, List<Map<String, String>> sourceUserParams) {
1418 for(Map<String, String> map : sourceUserParams) {
1419 for (Map.Entry<String, String> entry : map.entrySet()) {
1420 targetUserParams.put(entry.getKey(), entry.getValue());
1425 protected List<Map<String, Object>> mapFlatMapToNameValue(Map<String, Object> flatMap) {
1426 List<Map<String, Object>> targetUserParams = new ArrayList<>();
1428 for(Map.Entry<String, Object> map : flatMap.entrySet()) {
1429 Map<String, Object> targetMap = new HashMap<>();
1430 targetMap.put(NAME, map.getKey());
1431 targetMap.put(VALUE, map.getValue());
1432 targetUserParams.add(targetMap);
1434 return targetUserParams;
1437 private RecipeLookupResult getVnfOrVfModuleUri(ServiceInstancesRequest servInstReq, Actions action) throws ValidationException {
1439 ModelInfo modelInfo = servInstReq.getRequestDetails().getModelInfo();
1440 String vnfComponentType = modelInfo.getModelType().name();
1442 RelatedInstanceList[] instanceList = null;
1443 if (servInstReq.getRequestDetails() != null) {
1444 instanceList = servInstReq.getRequestDetails().getRelatedInstanceList();
1447 Recipe recipe = null;
1448 String defaultSource = getDefaultModel(servInstReq);
1449 String modelCustomizationId = modelInfo.getModelCustomizationId();
1450 String modelCustomizationName = modelInfo.getModelCustomizationName();
1451 String relatedInstanceModelVersionId = null;
1452 String relatedInstanceModelInvariantId = null;
1453 String relatedInstanceVersion = null;
1454 String relatedInstanceModelCustomizationName = null;
1456 if (instanceList != null) {
1458 for(RelatedInstanceList relatedInstanceList : instanceList){
1460 RelatedInstance relatedInstance = relatedInstanceList.getRelatedInstance();
1461 ModelInfo relatedInstanceModelInfo = relatedInstance.getModelInfo();
1462 if(relatedInstanceModelInfo.getModelType().equals(ModelType.service)){
1463 relatedInstanceModelVersionId = relatedInstanceModelInfo.getModelVersionId();
1464 relatedInstanceVersion = relatedInstanceModelInfo.getModelVersion();
1467 if(relatedInstanceModelInfo.getModelType().equals(ModelType.vnf)){
1468 relatedInstanceModelVersionId = relatedInstanceModelInfo.getModelVersionId();
1469 relatedInstanceModelInvariantId = relatedInstanceModelInfo.getModelInvariantId();
1470 relatedInstanceVersion = relatedInstanceModelInfo.getModelVersion();
1471 relatedInstanceModelCustomizationName = relatedInstanceModelInfo.getModelCustomizationName();
1475 if(modelInfo.getModelType().equals(ModelType.vnf)) {
1476 // a. For a vnf request (only create, no update currently):
1477 // i. (v3-v4) If modelInfo.modelCustomizationId is provided, use it to validate catalog DB has record in vnf_resource_customization.model_customization_uuid.
1478 // ii. (v2-v4) If modelInfo.modelCustomizationId is NOT provided (because it is a pre-1702 ASDC model or pre-v3), then modelInfo.modelCustomizationName must have
1479 // been provided (else create request should be rejected). APIH should use the relatedInstance.modelInfo[service].modelVersionId** + modelInfo[vnf].modelCustomizationName
1480 // to “join�? service_to_resource_customizations with vnf_resource_customization to confirm a vnf_resource_customization.model_customization_uuid record exists.
1481 // **If relatedInstance.modelInfo[service].modelVersionId was not provided, use relatedInstance.modelInfo[service].modelInvariantId + modelVersion instead to lookup modelVersionId
1482 // (MODEL_UUID) in SERVICE table.
1483 // iii. Regardless of how the value was provided/obtained above, APIH must always populate vnfModelCustomizationId in bpmnRequest. It would be assumed it was MSO generated
1484 // during 1707 data migration if VID did not provide it originally on request.
1485 // iv. Note: continue to construct the “vnf-type�? value and pass to BPMN (must still be populated in A&AI).
1486 // 1. If modelCustomizationName is NOT provided on a vnf/vfModule request, use modelCustomizationId to look it up in our catalog to construct vnf-type value to pass to BPMN.
1488 VnfResource vnfResource = null;
1489 VnfResourceCustomization vrc=null;
1490 // Validation for vnfResource
1492 if(modelCustomizationId!=null) {
1493 vrc = catalogDbClient.getVnfResourceCustomizationByModelCustomizationUUID(modelCustomizationId);
1495 vnfResource = vrc.getVnfResources();
1498 org.onap.so.db.catalog.beans.Service service = catalogDbClient.getServiceByID(relatedInstanceModelVersionId);
1499 if(service == null) {
1500 service = catalogDbClient.getServiceByModelVersionAndModelInvariantUUID(relatedInstanceVersion, relatedInstanceModelInvariantId);
1503 if(service == null) {
1504 throw new ValidationException("service in relatedInstance");
1506 for (VnfResourceCustomization vnfResourceCustom : service.getVnfCustomizations()) {
1507 if (vnfResourceCustom.getModelInstanceName().equals(modelCustomizationName)) {
1508 vrc=vnfResourceCustom;
1513 vnfResource = vrc.getVnfResources();
1514 modelInfo.setModelCustomizationId(vrc.getModelCustomizationUUID());
1515 modelInfo.setModelCustomizationUuid(vrc.getModelCustomizationUUID());
1519 if(vnfResource==null){
1520 throw new ValidationException("vnfResource");
1522 if(modelInfo.getModelVersionId() == null) {
1523 modelInfo.setModelVersionId(vnfResource.getModelUUID());
1527 VnfRecipe vnfRecipe = null;
1530 String nfRole = vrc.getNfRole();
1531 if(nfRole != null) {
1532 vnfRecipe = catalogDbClient.getFirstVnfRecipeByNfRoleAndAction(vrc.getNfRole(), action.toString());
1536 if(vnfRecipe == null) {
1537 vnfRecipe = catalogDbClient.getFirstVnfRecipeByNfRoleAndAction(defaultSource, action.toString());
1540 if (vnfRecipe == null) {
1544 return new RecipeLookupResult (vnfRecipe.getOrchestrationUri(), vnfRecipe.getRecipeTimeout());
1546 /* (v5-v7) If modelInfo.modelCustomizationId is NOT provided (because it is a pre-1702 ASDC model or pre-v3), then modelInfo.modelCustomizationName must have
1547 // been provided (else create request should be rejected). APIH should use the relatedInstance.modelInfo[vnf].modelVersionId + modelInfo[vnf].modelCustomizationName
1548 // to join vnf_to_resource_customizations with vf_resource_customization to confirm a vf_resource_customization.model_customization_uuid record exists.
1549 // Once the vnfs model_customization_uuid has been obtained, use it to find all vfModule customizations for that vnf customization in the vnf_res_custom_to_vf_module_custom join table.
1550 // For each vf_module_cust_model_customization_uuid value returned, use that UUID to query vf_module_customization table along with modelInfo[vfModule|volumeGroup].modelVersionId to
1551 // confirm record matches request data (and to identify the modelCustomizationId associated with the vfModule in the request). This means taking each record found
1552 // in vf_module_customization and looking up in vf_module (using vf_module_customization’s FK into vf_module) to find a match on MODEL_INVARIANT_UUID (modelInvariantId)
1553 // and MODEL_VERSION (modelVersion).
1555 VfModuleCustomization vfmc = null;
1557 VnfResourceCustomization vnfrc;
1558 VfModule vfModule = null;
1560 if(modelInfo.getModelCustomizationId() != null) {
1561 vfmc = catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID(modelInfo.getModelCustomizationId());
1563 vnfr = catalogDbClient.getVnfResourceByModelUUID(relatedInstanceModelVersionId);
1565 vnfr = catalogDbClient.getFirstVnfResourceByModelInvariantUUIDAndModelVersion(relatedInstanceModelInvariantId, relatedInstanceVersion);
1567 vnfrc = catalogDbClient.getFirstVnfResourceCustomizationByModelInstanceNameAndVnfResources(relatedInstanceModelCustomizationName, vnfr);
1569 List<VfModuleCustomization> list = vnfrc.getVfModuleCustomizations();
1571 String vfModuleModelUUID = modelInfo.getModelVersionId();
1572 for(VfModuleCustomization vf : list) {
1573 VfModuleCustomization vfmCustom;
1574 if(vfModuleModelUUID != null){
1575 vfmCustom = catalogDbClient.getVfModuleCustomizationByModelCustomizationUUIDAndVfModuleModelUUID(vf.getModelCustomizationUUID(), vfModuleModelUUID);
1576 if(vfmCustom != null){
1577 vfModule = vfmCustom.getVfModule();
1580 vfmCustom = catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID(vf.getModelCustomizationUUID());
1581 if(vfmCustom != null){
1582 vfModule = vfmCustom.getVfModule();
1584 vfModule = catalogDbClient.getVfModuleByModelInvariantUUIDAndModelVersion(relatedInstanceModelInvariantId, relatedInstanceVersion);
1588 if(vfModule != null) {
1589 modelInfo.setModelCustomizationId(vf.getModelCustomizationUUID());
1590 modelInfo.setModelCustomizationUuid(vf.getModelCustomizationUUID());
1596 if(vfmc == null && vfModule == null) {
1597 throw new ValidationException("vfModuleCustomization");
1598 } else if (vfModule == null && vfmc != null) {
1599 vfModule = vfmc.getVfModule(); // can't be null as vfModuleModelUUID is not-null property in VfModuleCustomization table
1602 if(modelInfo.getModelVersionId() == null) {
1603 modelInfo.setModelVersionId(vfModule.getModelUUID());
1607 recipe = catalogDbClient.getFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction(vfModule.getModelUUID(), vnfComponentType, action.toString());
1609 List<VfModule> vfModuleRecords= catalogDbClient.getVfModuleByModelInvariantUUIDOrderByModelVersionDesc(vfModule.getModelInvariantUUID());
1610 if(!vfModuleRecords.isEmpty()){
1611 for(VfModule record : vfModuleRecords){
1612 recipe = catalogDbClient.getFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction(record.getModelUUID(), vnfComponentType, action.toString());
1619 if(recipe == null) {
1620 recipe = catalogDbClient.getFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction(defaultSource, vnfComponentType, action.toString());
1621 if (recipe == null) {
1622 recipe = catalogDbClient.getFirstVnfComponentsRecipeByVnfComponentTypeAndAction(vnfComponentType, action.toString());
1625 if(recipe == null) {
1632 if(modelInfo.getModelType().equals(ModelType.vnf)) {
1633 recipe = catalogDbClient.getFirstVnfRecipeByNfRoleAndAction(defaultSource, action.toString());
1634 if (recipe == null) {
1638 recipe = catalogDbClient.getFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction(defaultSource, vnfComponentType, action.toString());
1640 if (recipe == null) {
1646 return new RecipeLookupResult (recipe.getOrchestrationUri (), recipe.getRecipeTimeout ());
1649 private RecipeLookupResult getDefaultVnfUri(ServiceInstancesRequest sir, Actions action) {
1651 String defaultSource = getDefaultModel(sir);
1653 VnfRecipe vnfRecipe = catalogDbClient.getFirstVnfRecipeByNfRoleAndAction(defaultSource, action.toString());
1655 if (vnfRecipe == null) {
1659 return new RecipeLookupResult (vnfRecipe.getOrchestrationUri(), vnfRecipe.getRecipeTimeout());
1663 private RecipeLookupResult getNetworkUri(ServiceInstancesRequest sir, Actions action) throws ValidationException {
1665 String defaultNetworkType = getDefaultModel(sir);
1667 ModelInfo modelInfo = sir.getRequestDetails().getModelInfo();
1668 String modelName = modelInfo.getModelName();
1669 Recipe recipe = null;
1671 if(modelInfo.getModelCustomizationId()!=null){
1672 NetworkResource networkResource = catalogDbClient.getNetworkResourceCustomizationByModelCustomizationUUID(modelInfo.getModelCustomizationId()).getNetworkResource();
1673 if(networkResource!=null){
1674 if(modelInfo.getModelVersionId() == null) {
1675 modelInfo.setModelVersionId(networkResource.getModelUUID());
1677 recipe = catalogDbClient.getFirstNetworkRecipeByModelNameAndAction(networkResource.getModelName(), action.toString());
1679 throw new ValidationException("no catalog entry found");
1682 //ok for version < 3 and action delete
1683 if(modelName != null){
1684 recipe = catalogDbClient.getFirstNetworkRecipeByModelNameAndAction(modelName, action.toString());
1689 recipe = catalogDbClient.getFirstNetworkRecipeByModelNameAndAction(defaultNetworkType, action.toString());
1692 return recipe !=null ? new RecipeLookupResult(recipe.getOrchestrationUri(), recipe.getRecipeTimeout()) : null;
1695 private Optional<String> retrieveModelName(RequestParameters requestParams) {
1696 String requestTestApi = null;
1697 TestApi testApi = null;
1699 if (requestParams != null) {
1700 requestTestApi = requestParams.getTestApi();
1703 if (requestTestApi == null) {
1704 if(requestParams != null && requestParams.getALaCarte() != null && !requestParams.getALaCarte()) {
1705 requestTestApi = env.getProperty(CommonConstants.MACRO_TEST_API);
1707 requestTestApi = env.getProperty(CommonConstants.ALACARTE_TEST_API);
1712 testApi = TestApi.valueOf(requestTestApi);
1713 return Optional.of(testApi.getModelName());
1714 } catch (Exception e) {
1715 msoLogger.warnSimple("Catching the exception on the valueOf enum call and continuing", e);
1716 throw new IllegalArgumentException("Invalid TestApi is provided", e);
1720 private String getDefaultModel(ServiceInstancesRequest sir) {
1721 String defaultModel = sir.getRequestDetails().getRequestInfo().getSource() + "_DEFAULT";
1722 Optional<String> oModelName = retrieveModelName(sir.getRequestDetails().getRequestParameters());
1723 if (oModelName.isPresent()) {
1724 defaultModel = oModelName.get();
1726 return defaultModel;
1729 private Response configurationRecipeLookup(String requestJSON, Action action, HashMap<String, String> instanceIdMap, String version, String requestId, String requestUri) throws ApiException {
1730 String serviceInstanceId = (instanceIdMap ==null)? null:instanceIdMap.get("serviceInstanceId");
1731 Boolean aLaCarte = null;
1732 String apiVersion = version.substring(1);
1734 long startTime = System.currentTimeMillis ();
1735 ServiceInstancesRequest sir = null;
1737 sir = convertJsonToServiceInstanceRequest(requestJSON, action, startTime, sir, msoRequest, requestId, requestUri);
1738 String requestScope = deriveRequestScope(action,sir, requestUri);
1739 InfraActiveRequests currentActiveReq = msoRequest.createRequestObject ( sir, action, requestId, Status.IN_PROGRESS, requestJSON, requestScope);
1740 if(sir.getRequestDetails().getRequestParameters() != null){
1741 aLaCarte = sir.getRequestDetails().getRequestParameters().getALaCarte();
1743 parseRequest(sir, instanceIdMap, action, version, requestJSON, aLaCarte, requestId, currentActiveReq);
1744 setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
1745 String instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();
1747 InfraActiveRequests dup = null;
1749 dup = duplicateCheck(action, instanceIdMap, startTime, msoRequest, instanceName,requestScope, currentActiveReq);
1751 if (instanceIdMap != null && dup != null) {
1752 buildErrorOnDuplicateRecord(currentActiveReq, action, instanceIdMap, startTime, msoRequest, instanceName, requestScope, dup);
1755 ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
1756 RequestReferences referencesResponse = new RequestReferences();
1757 referencesResponse.setRequestId(requestId);
1758 serviceResponse.setRequestReferences(referencesResponse);
1761 String orchestrationUri = env.getProperty(CommonConstants.ALACARTE_ORCHESTRATION);
1762 String timeOut = env.getProperty(CommonConstants.ALACARTE_RECIPE_TIMEOUT);
1764 if (StringUtils.isBlank(orchestrationUri) || StringUtils.isBlank(timeOut)) {
1765 String error = StringUtils.isBlank(orchestrationUri) ? "ALaCarte Orchestration URI not found in properties" : "ALaCarte Recipe Timeout not found in properties";
1767 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, MsoLogger.ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1770 ValidateException validateException = new ValidateException.Builder(error, HttpStatus.SC_NOT_FOUND, ErrorNumbers.SVC_GENERAL_SERVICE_ERROR)
1771 .errorInfo(errorLoggerInfo).build();
1773 updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1775 throw validateException;
1779 serviceInstanceId = "";
1780 String configurationId = "";
1781 String correlationId = "";
1783 if(sir.getServiceInstanceId () != null){
1784 serviceInstanceId = sir.getServiceInstanceId ();
1787 if(sir.getConfigurationId() != null){
1788 configurationId = sir.getConfigurationId();
1791 correlationId = getCorrelationId(sir);
1794 infraActiveRequestsClient.save(currentActiveReq);
1795 }catch(Exception e){
1796 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, MsoLogger.ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1797 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e)
1798 .errorInfo(errorLoggerInfo).build();
1801 if(!requestScope.equalsIgnoreCase(ModelType.service.name())){
1803 }else if(aLaCarte == null){
1806 RequestClientParameter requestClientParameter = null;
1808 requestClientParameter = new RequestClientParameter.Builder()
1809 .setRequestId(requestId)
1810 .setBaseVfModule(false)
1811 .setRecipeTimeout(Integer.parseInt(timeOut))
1812 .setRequestAction(action.toString())
1813 .setServiceInstanceId(serviceInstanceId)
1814 .setCorrelationId(correlationId)
1815 .setConfigurationId(configurationId)
1816 .setRequestDetails(mapJSONtoMSOStyle(requestJSON, sir, aLaCarte, action))
1817 .setApiVersion(apiVersion)
1818 .setALaCarte(aLaCarte)
1819 .setRequestUri(requestUri).build();
1820 } catch (IOException e) {
1821 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1822 throw new ValidateException.Builder("Unable to generate RequestClientParamter object" + e.getMessage(), HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER)
1823 .errorInfo(errorLoggerInfo).build();
1826 return postBPELRequest(currentActiveReq, requestClientParameter, orchestrationUri, requestScope);
1829 public String getRequestId(ContainerRequestContext requestContext) throws ValidateException {
1830 String requestId = null;
1831 if (requestContext.getProperty("requestId") != null) {
1832 requestId = requestContext.getProperty("requestId").toString();
1834 if (UUIDChecker.isValidUUID(requestId)) {
1837 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1838 ValidateException validateException = new ValidateException.Builder("Request Id " + requestId + " is not a valid UUID", HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER)
1839 .errorInfo(errorLoggerInfo).build();
1841 throw validateException;
1844 public void updateStatus(InfraActiveRequests aq, Status status, String errorMessage) throws RequestDbFailureException{
1845 if ((status == Status.FAILED) || (status == Status.COMPLETE)) {
1846 aq.setStatusMessage (errorMessage);
1847 aq.setProgress(new Long(100));
1848 aq.setRequestStatus(status.toString());
1849 Timestamp endTimeStamp = new Timestamp (System.currentTimeMillis());
1850 aq.setEndTime (endTimeStamp);
1852 infraActiveRequestsClient.save(aq);
1853 }catch(Exception e){
1854 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, MsoLogger.ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1855 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e)
1856 .errorInfo(errorLoggerInfo).build();