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.PENDING, 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.PENDING, 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;
1023 currentActiveReq.setRequestStatus(Status.IN_PROGRESS.name());
1024 setInstanceId(currentActiveReq, requestScope, jsonResponse.getRequestReferences().getInstanceId(), new HashMap<>());
1027 infraActiveRequestsClient.save(currentActiveReq);
1028 }catch(Exception e){
1029 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, MsoLogger.ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1030 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e)
1031 .errorInfo(errorLoggerInfo).build();
1034 return builder.buildResponse(HttpStatus.SC_ACCEPTED, requestClientParameter.getRequestId(), jsonResponse, requestClientParameter.getApiVersion());
1038 List<String> variables = new ArrayList<>();
1039 variables.add(bpelStatus + "");
1040 String camundaJSONResponseBody = respHandler.getResponseBody ();
1041 if (camundaJSONResponseBody != null && !camundaJSONResponseBody.isEmpty ()) {
1043 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, MsoLogger.ErrorCode.BusinessProcesssError).errorSource(requestClient.getUrl()).build();
1044 BPMNFailureException bpmnException = new BPMNFailureException.Builder(String.valueOf(bpelStatus) + camundaJSONResponseBody, bpelStatus, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR)
1045 .errorInfo(errorLoggerInfo).build();
1047 updateStatus(currentActiveReq, Status.FAILED, bpmnException.getMessage());
1049 throw bpmnException;
1052 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, MsoLogger.ErrorCode.BusinessProcesssError).errorSource(requestClient.getUrl()).build();
1055 BPMNFailureException servException = new BPMNFailureException.Builder(String.valueOf(bpelStatus), bpelStatus, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR)
1056 .errorInfo(errorLoggerInfo).build();
1057 updateStatus(currentActiveReq, Status.FAILED, servException.getMessage());
1059 throw servException;
1063 private void setInstanceId(InfraActiveRequests currentActiveReq, String requestScope, String instanceId, Map<String, String> instanceIdMap) {
1064 if(StringUtils.isNotBlank(instanceId)) {
1065 if(ModelType.service.name().equalsIgnoreCase(requestScope)) {
1066 currentActiveReq.setServiceInstanceId(instanceId);
1067 } else if(ModelType.vnf.name().equalsIgnoreCase(requestScope)) {
1068 currentActiveReq.setVnfId(instanceId);
1069 } else if(ModelType.vfModule.name().equalsIgnoreCase(requestScope)) {
1070 currentActiveReq.setVfModuleId(instanceId);
1071 } else if(ModelType.volumeGroup.name().equalsIgnoreCase(requestScope)) {
1072 currentActiveReq.setVolumeGroupId(instanceId);
1073 } else if(ModelType.network.name().equalsIgnoreCase(requestScope)) {
1074 currentActiveReq.setNetworkId(instanceId);
1075 } else if(ModelType.configuration.name().equalsIgnoreCase(requestScope)) {
1076 currentActiveReq.setConfigurationId(instanceId);
1077 }else if(ModelType.instanceGroup.toString().equalsIgnoreCase(requestScope)){
1078 currentActiveReq.setInstanceGroupId(instanceId);
1080 } else if(instanceIdMap != null && !instanceIdMap.isEmpty()) {
1081 if(instanceIdMap.get("serviceInstanceId") != null){
1082 currentActiveReq.setServiceInstanceId(instanceIdMap.get("serviceInstanceId"));
1084 if(instanceIdMap.get("vnfInstanceId") != null){
1085 currentActiveReq.setVnfId(instanceIdMap.get("vnfInstanceId"));
1087 if(instanceIdMap.get("vfModuleInstanceId") != null){
1088 currentActiveReq.setVfModuleId(instanceIdMap.get("vfModuleInstanceId"));
1090 if(instanceIdMap.get("volumeGroupInstanceId") != null){
1091 currentActiveReq.setVolumeGroupId(instanceIdMap.get("volumeGroupInstanceId"));
1093 if(instanceIdMap.get("networkInstanceId") != null){
1094 currentActiveReq.setNetworkId(instanceIdMap.get("networkInstanceId"));
1096 if(instanceIdMap.get("configurationInstanceId") != null){
1097 currentActiveReq.setConfigurationId(instanceIdMap.get("configurationInstanceId"));
1099 if(instanceIdMap.get("InstanceGroupInstanceId") != null){
1100 currentActiveReq.setInstanceGroupId(instanceIdMap.get("InstanceGroupInstanceId"));
1105 protected String mapJSONtoMSOStyle(String msoRawRequest, ServiceInstancesRequest serviceInstRequest, boolean isAlaCarte, Actions action) throws IOException {
1106 ObjectMapper mapper = new ObjectMapper();
1107 mapper.setSerializationInclusion(Include.NON_NULL);
1108 if(msoRawRequest != null){
1109 ServiceInstancesRequest sir = mapper.readValue(msoRawRequest, ServiceInstancesRequest.class);
1110 if( !isAlaCarte && Action.createInstance.equals(action) && serviceInstRequest != null &&
1111 serviceInstRequest.getRequestDetails() != null &&
1112 serviceInstRequest.getRequestDetails().getRequestParameters() != null) {
1113 sir.getRequestDetails().setCloudConfiguration(serviceInstRequest.getRequestDetails().getCloudConfiguration());
1114 sir.getRequestDetails().getRequestParameters().setUserParams(serviceInstRequest.getRequestDetails().getRequestParameters().getUserParams());
1116 msoLogger.debug("Value as string: " + mapper.writeValueAsString(sir));
1117 return mapper.writeValueAsString(sir);
1122 private void buildErrorOnDuplicateRecord(InfraActiveRequests currentActiveReq, Actions action, HashMap<String, String> instanceIdMap, long startTime, MsoRequest msoRequest,
1123 String instanceName, String requestScope, InfraActiveRequests dup) throws ApiException {
1125 // Found the duplicate record. Return the appropriate error.
1126 String instance = null;
1127 if(instanceName != null){
1128 instance = instanceName;
1130 instance = instanceIdMap.get(requestScope + "InstanceId");
1132 //List<String> variables = new ArrayList<String>();
1133 //variables.add(dup.getRequestStatus());
1134 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DUPLICATE_FOUND, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1137 DuplicateRequestException dupException = new DuplicateRequestException.Builder(requestScope,instance,dup.getRequestStatus(),dup.getRequestId(), HttpStatus.SC_CONFLICT, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR)
1138 .errorInfo(errorLoggerInfo).build();
1140 updateStatus(currentActiveReq, Status.FAILED, dupException.getMessage());
1145 private InfraActiveRequests duplicateCheck(Actions action, HashMap<String, String> instanceIdMap, long startTime,
1146 MsoRequest msoRequest, String instanceName, String requestScope, InfraActiveRequests currentActiveReq) throws ApiException {
1147 InfraActiveRequests dup = null;
1149 if(!(instanceName==null && requestScope.equals("service") && (action == Action.createInstance || action == Action.activateInstance || action == Action.assignInstance))){
1150 dup = infraActiveRequestsClient.checkInstanceNameDuplicate (instanceIdMap, instanceName, requestScope);
1152 } catch (Exception e) {
1153 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DUPLICATE_CHECK_EXC, MsoLogger.ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1154 RequestDbFailureException requestDbFailureException = new RequestDbFailureException.Builder("check for duplicate instance", e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e)
1155 .errorInfo(errorLoggerInfo).build();
1156 updateStatus(currentActiveReq, Status.FAILED, requestDbFailureException.getMessage());
1157 throw requestDbFailureException;
1162 private ServiceInstancesRequest convertJsonToServiceInstanceRequest(String requestJSON, Actions action, long startTime,
1163 ServiceInstancesRequest sir, MsoRequest msoRequest, String requestId, String requestUri) throws ApiException {
1165 ObjectMapper mapper = new ObjectMapper();
1166 return mapper.readValue(requestJSON, ServiceInstancesRequest.class);
1168 } catch (IOException e) {
1170 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1172 ValidateException validateException = new ValidateException.Builder("Error mapping request: " + e.getMessage(), HttpStatus.SC_BAD_REQUEST, ErrorNumbers.SVC_BAD_PARAMETER).cause(e)
1173 .errorInfo(errorLoggerInfo).build();
1174 String requestScope = requestScopeFromUri(requestUri);
1176 msoRequest.createErrorRequestRecord(Status.FAILED, requestId, validateException.getMessage(), action, requestScope, requestJSON);
1178 throw validateException;
1182 private void parseRequest(ServiceInstancesRequest sir, HashMap<String, String> instanceIdMap, Actions action, String version,
1183 String requestJSON, Boolean aLaCarte, String requestId, InfraActiveRequests currentActiveReq) throws ValidateException, RequestDbFailureException {
1184 int reqVersion = Integer.parseInt(version.substring(1));
1186 msoRequest.parse(sir, instanceIdMap, action, version, requestJSON, reqVersion, aLaCarte);
1187 } catch (Exception e) {
1188 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1189 ValidateException validateException = new ValidateException.Builder("Error parsing request: " + e.getMessage(), HttpStatus.SC_BAD_REQUEST, ErrorNumbers.SVC_BAD_PARAMETER).cause(e)
1190 .errorInfo(errorLoggerInfo).build();
1192 updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1194 throw validateException;
1198 private RecipeLookupResult getServiceInstanceOrchestrationURI(ServiceInstancesRequest sir, Actions action, boolean alaCarteFlag,
1199 InfraActiveRequests currentActiveReq) throws ApiException {
1200 RecipeLookupResult recipeLookupResult = null;
1201 //if the aLaCarte flag is set to TRUE, the API-H should choose the VID_DEFAULT recipe for the requested action
1202 ModelInfo modelInfo = sir.getRequestDetails().getModelInfo();
1203 // Query MSO Catalog DB
1205 if (action == Action.applyUpdatedConfig || action == Action.inPlaceSoftwareUpdate) {
1206 recipeLookupResult = getDefaultVnfUri(sir, action);
1207 }else if(action == Action.addMembers || action == Action.removeMembers){
1208 recipeLookupResult = new RecipeLookupResult("/mso/async/services/WorkflowActionBB", 180);
1209 }else if (modelInfo.getModelType().equals(ModelType.service)) {
1211 recipeLookupResult = getServiceURI(sir, action,alaCarteFlag);
1212 } catch (IOException e) {
1213 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1216 ValidateException validateException = new ValidateException.Builder(e.getMessage(), HttpStatus.SC_BAD_REQUEST, ErrorNumbers.SVC_BAD_PARAMETER).cause(e)
1217 .errorInfo(errorLoggerInfo).build();
1219 updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1221 throw validateException;
1223 } else if (modelInfo.getModelType().equals(ModelType.vfModule) ||
1224 modelInfo.getModelType().equals(ModelType.volumeGroup) || modelInfo.getModelType().equals(ModelType.vnf)) {
1226 recipeLookupResult = getVnfOrVfModuleUri( sir, action);
1227 } catch (ValidationException e) {
1228 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1231 ValidateException validateException = new ValidateException.Builder(e.getMessage(), HttpStatus.SC_BAD_REQUEST, ErrorNumbers.SVC_BAD_PARAMETER).cause(e)
1232 .errorInfo(errorLoggerInfo).build();
1234 updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1236 throw validateException;
1238 }else if (modelInfo.getModelType().equals(ModelType.network)) {
1240 recipeLookupResult = getNetworkUri( sir, action);
1241 } catch (ValidationException e) {
1243 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1246 ValidateException validateException = new ValidateException.Builder(e.getMessage(), HttpStatus.SC_BAD_REQUEST, ErrorNumbers.SVC_BAD_PARAMETER).cause(e)
1247 .errorInfo(errorLoggerInfo).build();
1248 updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1250 throw validateException;
1252 }else if(modelInfo.getModelType().equals(ModelType.instanceGroup)){
1253 recipeLookupResult = new RecipeLookupResult("/mso/async/services/WorkflowActionBB", 180);
1256 if (recipeLookupResult == null) {
1257 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, MsoLogger.ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1260 RecipeNotFoundException recipeNotFoundExceptionException = new RecipeNotFoundException.Builder("Recipe could not be retrieved from catalog DB.", HttpStatus.SC_NOT_FOUND, ErrorNumbers.SVC_GENERAL_SERVICE_ERROR)
1261 .errorInfo(errorLoggerInfo).build();
1263 updateStatus(currentActiveReq, Status.FAILED, recipeNotFoundExceptionException.getMessage());
1264 throw recipeNotFoundExceptionException;
1266 return recipeLookupResult;
1269 private RecipeLookupResult getServiceURI(ServiceInstancesRequest servInstReq, Actions action, boolean alaCarteFlag) throws IOException {
1271 // Construct the default service name
1272 // TODO need to make this a configurable property
1273 String defaultServiceModelName = getDefaultModel(servInstReq);
1274 RequestDetails requestDetails = servInstReq.getRequestDetails();
1275 ModelInfo modelInfo = requestDetails.getModelInfo();
1276 org.onap.so.db.catalog.beans.Service serviceRecord;
1277 List<org.onap.so.db.catalog.beans.Service> serviceRecordList;
1278 ServiceRecipe recipe = null;
1281 serviceRecord = catalogDbClient.getFirstByModelNameOrderByModelVersionDesc(defaultServiceModelName);
1282 if(serviceRecord !=null){
1283 recipe =catalogDbClient.getFirstByServiceModelUUIDAndAction(serviceRecord.getModelUUID(),action.toString());
1286 serviceRecord = catalogDbClient.getServiceByID(modelInfo.getModelVersionId());
1287 recipe = catalogDbClient.getFirstByServiceModelUUIDAndAction(modelInfo.getModelVersionId(), action.toString());
1288 if (recipe == null){
1289 serviceRecordList = catalogDbClient.getServiceByModelInvariantUUIDOrderByModelVersionDesc(modelInfo.getModelInvariantId());
1290 if(!serviceRecordList.isEmpty()){
1291 for(org.onap.so.db.catalog.beans.Service record : serviceRecordList){
1292 recipe = catalogDbClient.getFirstByServiceModelUUIDAndAction(record.getModelUUID(),action.toString());
1301 //if an aLaCarte flag was sent in the request, throw an error if the recipe was not found
1302 RequestParameters reqParam = requestDetails.getRequestParameters();
1303 if(reqParam!=null && alaCarteFlag && recipe==null){
1305 } else if(!alaCarteFlag && recipe != null && Action.createInstance.equals(action)) {
1306 mapToLegacyRequest(requestDetails);
1307 }else if (recipe == null) { //aLaCarte wasn't sent, so we'll try the default
1308 serviceRecord = catalogDbClient.getFirstByModelNameOrderByModelVersionDesc(defaultServiceModelName);
1309 recipe = catalogDbClient.getFirstByServiceModelUUIDAndAction(serviceRecord.getModelUUID(),action.toString());
1311 if(modelInfo.getModelVersionId() == null) {
1312 modelInfo.setModelVersionId(serviceRecord.getModelUUID());
1317 return new RecipeLookupResult (recipe.getOrchestrationUri (), recipe.getRecipeTimeout ());
1320 protected void mapToLegacyRequest(RequestDetails requestDetails) throws IOException {
1321 RequestParameters reqParam;
1322 if (requestDetails.getRequestParameters() == null) {
1323 reqParam = new RequestParameters();
1325 reqParam = requestDetails.getRequestParameters();
1327 if(requestDetails.getCloudConfiguration() == null) {
1328 CloudConfiguration cloudConfig = configureCloudConfig(reqParam);
1329 if(cloudConfig != null) {
1330 requestDetails.setCloudConfiguration(cloudConfig);
1334 List<Map<String, Object>> userParams = configureUserParams(reqParam);
1335 if(!userParams.isEmpty()) {
1336 if (reqParam == null) {
1337 requestDetails.setRequestParameters(new RequestParameters());
1339 requestDetails.getRequestParameters().setUserParams(userParams);
1343 protected CloudConfiguration configureCloudConfig(RequestParameters reqParams) throws IOException {
1345 for(Map<String, Object> params : reqParams.getUserParams()){
1346 if(params.containsKey("service")){
1347 Service service = serviceMapper(params);
1349 Optional<CloudConfiguration> targetConfiguration = addCloudConfig(service.getCloudConfiguration());
1351 if (targetConfiguration.isPresent()) {
1352 return targetConfiguration.get();
1354 for(Networks network : service.getResources().getNetworks()) {
1355 targetConfiguration = addCloudConfig(network.getCloudConfiguration());
1356 if(targetConfiguration.isPresent()) {
1357 return targetConfiguration.get();
1361 for(Vnfs vnf : service.getResources().getVnfs()) {
1362 targetConfiguration = addCloudConfig(vnf.getCloudConfiguration());
1364 if(targetConfiguration.isPresent()) {
1365 return targetConfiguration.get();
1368 for(VfModules vfModule : vnf.getVfModules()) {
1369 targetConfiguration = addCloudConfig(vfModule.getCloudConfiguration());
1371 if(targetConfiguration.isPresent()) {
1372 return targetConfiguration.get();
1383 private Optional<CloudConfiguration> addCloudConfig(CloudConfiguration sourceCloudConfiguration) {
1384 CloudConfiguration targetConfiguration = new CloudConfiguration();
1385 if(sourceCloudConfiguration != null) {
1386 targetConfiguration.setAicNodeClli(sourceCloudConfiguration.getAicNodeClli());
1387 targetConfiguration.setTenantId(sourceCloudConfiguration.getTenantId());
1388 targetConfiguration.setLcpCloudRegionId(sourceCloudConfiguration.getLcpCloudRegionId());
1389 targetConfiguration.setCloudOwner(sourceCloudConfiguration.getCloudOwner());
1390 return Optional.of(targetConfiguration);
1392 return Optional.empty();
1395 protected List<Map<String, Object>> configureUserParams(RequestParameters reqParams) throws IOException {
1396 msoLogger.debug("Configuring UserParams for Macro Request");
1397 Map<String, Object> userParams = new HashMap<>();
1399 for(Map<String, Object> params : reqParams.getUserParams()){
1400 if(params.containsKey("service")){
1401 Service service = serviceMapper(params);
1403 addUserParams(userParams, service.getInstanceParams());
1405 for(Networks network : service.getResources().getNetworks()) {
1406 addUserParams(userParams, network.getInstanceParams());
1409 for(Vnfs vnf: service.getResources().getVnfs()) {
1410 addUserParams(userParams, vnf.getInstanceParams());
1412 for(VfModules vfModule: vnf.getVfModules()) {
1413 addUserParams(userParams, vfModule.getInstanceParams());
1419 return mapFlatMapToNameValue(userParams);
1422 private Service serviceMapper(Map<String, Object> params)
1423 throws JsonProcessingException, IOException, JsonParseException, JsonMappingException {
1424 ObjectMapper obj = new ObjectMapper();
1425 String input = obj.writeValueAsString(params.get("service"));
1426 return obj.readValue(input, Service.class);
1429 private void addUserParams(Map<String, Object> targetUserParams, List<Map<String, String>> sourceUserParams) {
1430 for(Map<String, String> map : sourceUserParams) {
1431 for (Map.Entry<String, String> entry : map.entrySet()) {
1432 targetUserParams.put(entry.getKey(), entry.getValue());
1437 protected List<Map<String, Object>> mapFlatMapToNameValue(Map<String, Object> flatMap) {
1438 List<Map<String, Object>> targetUserParams = new ArrayList<>();
1440 for(Map.Entry<String, Object> map : flatMap.entrySet()) {
1441 Map<String, Object> targetMap = new HashMap<>();
1442 targetMap.put(NAME, map.getKey());
1443 targetMap.put(VALUE, map.getValue());
1444 targetUserParams.add(targetMap);
1446 return targetUserParams;
1449 private RecipeLookupResult getVnfOrVfModuleUri(ServiceInstancesRequest servInstReq, Actions action) throws ValidationException {
1451 ModelInfo modelInfo = servInstReq.getRequestDetails().getModelInfo();
1452 String vnfComponentType = modelInfo.getModelType().name();
1454 RelatedInstanceList[] instanceList = null;
1455 if (servInstReq.getRequestDetails() != null) {
1456 instanceList = servInstReq.getRequestDetails().getRelatedInstanceList();
1459 Recipe recipe = null;
1460 String defaultSource = getDefaultModel(servInstReq);
1461 String modelCustomizationId = modelInfo.getModelCustomizationId();
1462 String modelCustomizationName = modelInfo.getModelCustomizationName();
1463 String relatedInstanceModelVersionId = null;
1464 String relatedInstanceModelInvariantId = null;
1465 String relatedInstanceVersion = null;
1466 String relatedInstanceModelCustomizationName = null;
1468 if (instanceList != null) {
1470 for(RelatedInstanceList relatedInstanceList : instanceList){
1472 RelatedInstance relatedInstance = relatedInstanceList.getRelatedInstance();
1473 ModelInfo relatedInstanceModelInfo = relatedInstance.getModelInfo();
1474 if(relatedInstanceModelInfo.getModelType().equals(ModelType.service)){
1475 relatedInstanceModelVersionId = relatedInstanceModelInfo.getModelVersionId();
1476 relatedInstanceVersion = relatedInstanceModelInfo.getModelVersion();
1479 if(relatedInstanceModelInfo.getModelType().equals(ModelType.vnf)){
1480 relatedInstanceModelVersionId = relatedInstanceModelInfo.getModelVersionId();
1481 relatedInstanceModelInvariantId = relatedInstanceModelInfo.getModelInvariantId();
1482 relatedInstanceVersion = relatedInstanceModelInfo.getModelVersion();
1483 relatedInstanceModelCustomizationName = relatedInstanceModelInfo.getModelCustomizationName();
1487 if(modelInfo.getModelType().equals(ModelType.vnf)) {
1488 // a. For a vnf request (only create, no update currently):
1489 // i. (v3-v4) If modelInfo.modelCustomizationId is provided, use it to validate catalog DB has record in vnf_resource_customization.model_customization_uuid.
1490 // 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
1491 // been provided (else create request should be rejected). APIH should use the relatedInstance.modelInfo[service].modelVersionId** + modelInfo[vnf].modelCustomizationName
1492 // to “join�? service_to_resource_customizations with vnf_resource_customization to confirm a vnf_resource_customization.model_customization_uuid record exists.
1493 // **If relatedInstance.modelInfo[service].modelVersionId was not provided, use relatedInstance.modelInfo[service].modelInvariantId + modelVersion instead to lookup modelVersionId
1494 // (MODEL_UUID) in SERVICE table.
1495 // 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
1496 // during 1707 data migration if VID did not provide it originally on request.
1497 // iv. Note: continue to construct the “vnf-type�? value and pass to BPMN (must still be populated in A&AI).
1498 // 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.
1500 VnfResource vnfResource = null;
1501 VnfResourceCustomization vrc=null;
1502 // Validation for vnfResource
1504 if(modelCustomizationId!=null) {
1505 vrc = catalogDbClient.getVnfResourceCustomizationByModelCustomizationUUID(modelCustomizationId);
1507 vnfResource = vrc.getVnfResources();
1510 org.onap.so.db.catalog.beans.Service service = catalogDbClient.getServiceByID(relatedInstanceModelVersionId);
1511 if(service == null) {
1512 service = catalogDbClient.getServiceByModelVersionAndModelInvariantUUID(relatedInstanceVersion, relatedInstanceModelInvariantId);
1515 if(service == null) {
1516 throw new ValidationException("service in relatedInstance");
1518 for (VnfResourceCustomization vnfResourceCustom : service.getVnfCustomizations()) {
1519 if (vnfResourceCustom.getModelInstanceName().equals(modelCustomizationName)) {
1520 vrc=vnfResourceCustom;
1525 vnfResource = vrc.getVnfResources();
1526 modelInfo.setModelCustomizationId(vrc.getModelCustomizationUUID());
1527 modelInfo.setModelCustomizationUuid(vrc.getModelCustomizationUUID());
1531 if(vnfResource==null){
1532 throw new ValidationException("vnfResource");
1534 if(modelInfo.getModelVersionId() == null) {
1535 modelInfo.setModelVersionId(vnfResource.getModelUUID());
1539 VnfRecipe vnfRecipe = null;
1542 String nfRole = vrc.getNfRole();
1543 if(nfRole != null) {
1544 vnfRecipe = catalogDbClient.getFirstVnfRecipeByNfRoleAndAction(vrc.getNfRole(), action.toString());
1548 if(vnfRecipe == null) {
1549 vnfRecipe = catalogDbClient.getFirstVnfRecipeByNfRoleAndAction(defaultSource, action.toString());
1552 if (vnfRecipe == null) {
1556 return new RecipeLookupResult (vnfRecipe.getOrchestrationUri(), vnfRecipe.getRecipeTimeout());
1558 /* (v5-v7) If modelInfo.modelCustomizationId is NOT provided (because it is a pre-1702 ASDC model or pre-v3), then modelInfo.modelCustomizationName must have
1559 // been provided (else create request should be rejected). APIH should use the relatedInstance.modelInfo[vnf].modelVersionId + modelInfo[vnf].modelCustomizationName
1560 // to join vnf_to_resource_customizations with vf_resource_customization to confirm a vf_resource_customization.model_customization_uuid record exists.
1561 // 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.
1562 // 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
1563 // confirm record matches request data (and to identify the modelCustomizationId associated with the vfModule in the request). This means taking each record found
1564 // 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)
1565 // and MODEL_VERSION (modelVersion).
1567 VfModuleCustomization vfmc = null;
1569 VnfResourceCustomization vnfrc;
1570 VfModule vfModule = null;
1572 if(modelInfo.getModelCustomizationId() != null) {
1573 vfmc = catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID(modelInfo.getModelCustomizationId());
1575 vnfr = catalogDbClient.getVnfResourceByModelUUID(relatedInstanceModelVersionId);
1577 vnfr = catalogDbClient.getFirstVnfResourceByModelInvariantUUIDAndModelVersion(relatedInstanceModelInvariantId, relatedInstanceVersion);
1579 vnfrc = catalogDbClient.getFirstVnfResourceCustomizationByModelInstanceNameAndVnfResources(relatedInstanceModelCustomizationName, vnfr);
1581 List<VfModuleCustomization> list = vnfrc.getVfModuleCustomizations();
1583 String vfModuleModelUUID = modelInfo.getModelVersionId();
1584 for(VfModuleCustomization vf : list) {
1585 VfModuleCustomization vfmCustom;
1586 if(vfModuleModelUUID != null){
1587 vfmCustom = catalogDbClient.getVfModuleCustomizationByModelCustomizationUUIDAndVfModuleModelUUID(vf.getModelCustomizationUUID(), vfModuleModelUUID);
1588 if(vfmCustom != null){
1589 vfModule = vfmCustom.getVfModule();
1592 vfmCustom = catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID(vf.getModelCustomizationUUID());
1593 if(vfmCustom != null){
1594 vfModule = vfmCustom.getVfModule();
1596 vfModule = catalogDbClient.getVfModuleByModelInvariantUUIDAndModelVersion(relatedInstanceModelInvariantId, relatedInstanceVersion);
1600 if(vfModule != null) {
1601 modelInfo.setModelCustomizationId(vf.getModelCustomizationUUID());
1602 modelInfo.setModelCustomizationUuid(vf.getModelCustomizationUUID());
1608 if(vfmc == null && vfModule == null) {
1609 throw new ValidationException("vfModuleCustomization");
1610 } else if (vfModule == null && vfmc != null) {
1611 vfModule = vfmc.getVfModule(); // can't be null as vfModuleModelUUID is not-null property in VfModuleCustomization table
1614 if(modelInfo.getModelVersionId() == null) {
1615 modelInfo.setModelVersionId(vfModule.getModelUUID());
1619 recipe = catalogDbClient.getFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction(vfModule.getModelUUID(), vnfComponentType, action.toString());
1621 List<VfModule> vfModuleRecords= catalogDbClient.getVfModuleByModelInvariantUUIDOrderByModelVersionDesc(vfModule.getModelInvariantUUID());
1622 if(!vfModuleRecords.isEmpty()){
1623 for(VfModule record : vfModuleRecords){
1624 recipe = catalogDbClient.getFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction(record.getModelUUID(), vnfComponentType, action.toString());
1631 if(recipe == null) {
1632 recipe = catalogDbClient.getFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction(defaultSource, vnfComponentType, action.toString());
1633 if (recipe == null) {
1634 recipe = catalogDbClient.getFirstVnfComponentsRecipeByVnfComponentTypeAndAction(vnfComponentType, action.toString());
1637 if(recipe == null) {
1644 if(modelInfo.getModelType().equals(ModelType.vnf)) {
1645 recipe = catalogDbClient.getFirstVnfRecipeByNfRoleAndAction(defaultSource, action.toString());
1646 if (recipe == null) {
1650 recipe = catalogDbClient.getFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction(defaultSource, vnfComponentType, action.toString());
1652 if (recipe == null) {
1658 return new RecipeLookupResult (recipe.getOrchestrationUri (), recipe.getRecipeTimeout ());
1661 private RecipeLookupResult getDefaultVnfUri(ServiceInstancesRequest sir, Actions action) {
1663 String defaultSource = getDefaultModel(sir);
1665 VnfRecipe vnfRecipe = catalogDbClient.getFirstVnfRecipeByNfRoleAndAction(defaultSource, action.toString());
1667 if (vnfRecipe == null) {
1671 return new RecipeLookupResult (vnfRecipe.getOrchestrationUri(), vnfRecipe.getRecipeTimeout());
1675 private RecipeLookupResult getNetworkUri(ServiceInstancesRequest sir, Actions action) throws ValidationException {
1677 String defaultNetworkType = getDefaultModel(sir);
1679 ModelInfo modelInfo = sir.getRequestDetails().getModelInfo();
1680 String modelName = modelInfo.getModelName();
1681 Recipe recipe = null;
1683 if(modelInfo.getModelCustomizationId()!=null){
1684 NetworkResource networkResource = catalogDbClient.getNetworkResourceCustomizationByModelCustomizationUUID(modelInfo.getModelCustomizationId()).getNetworkResource();
1685 if(networkResource!=null){
1686 if(modelInfo.getModelVersionId() == null) {
1687 modelInfo.setModelVersionId(networkResource.getModelUUID());
1689 recipe = catalogDbClient.getFirstNetworkRecipeByModelNameAndAction(networkResource.getModelName(), action.toString());
1691 throw new ValidationException("no catalog entry found");
1694 //ok for version < 3 and action delete
1695 if(modelName != null){
1696 recipe = catalogDbClient.getFirstNetworkRecipeByModelNameAndAction(modelName, action.toString());
1701 recipe = catalogDbClient.getFirstNetworkRecipeByModelNameAndAction(defaultNetworkType, action.toString());
1704 return recipe !=null ? new RecipeLookupResult(recipe.getOrchestrationUri(), recipe.getRecipeTimeout()) : null;
1707 private Optional<String> retrieveModelName(RequestParameters requestParams) {
1708 String requestTestApi = null;
1709 TestApi testApi = null;
1711 if (requestParams != null) {
1712 requestTestApi = requestParams.getTestApi();
1715 if (requestTestApi == null) {
1716 if(requestParams != null && requestParams.getALaCarte() != null && !requestParams.getALaCarte()) {
1717 requestTestApi = env.getProperty(CommonConstants.MACRO_TEST_API);
1719 requestTestApi = env.getProperty(CommonConstants.ALACARTE_TEST_API);
1724 testApi = TestApi.valueOf(requestTestApi);
1725 return Optional.of(testApi.getModelName());
1726 } catch (Exception e) {
1727 msoLogger.warnSimple("Catching the exception on the valueOf enum call and continuing", e);
1728 throw new IllegalArgumentException("Invalid TestApi is provided", e);
1732 private String getDefaultModel(ServiceInstancesRequest sir) {
1733 String defaultModel = sir.getRequestDetails().getRequestInfo().getSource() + "_DEFAULT";
1734 Optional<String> oModelName = retrieveModelName(sir.getRequestDetails().getRequestParameters());
1735 if (oModelName.isPresent()) {
1736 defaultModel = oModelName.get();
1738 return defaultModel;
1741 private Response configurationRecipeLookup(String requestJSON, Action action, HashMap<String, String> instanceIdMap, String version, String requestId, String requestUri) throws ApiException {
1742 String serviceInstanceId = (instanceIdMap ==null)? null:instanceIdMap.get("serviceInstanceId");
1743 Boolean aLaCarte = null;
1744 String apiVersion = version.substring(1);
1746 long startTime = System.currentTimeMillis ();
1747 ServiceInstancesRequest sir = null;
1749 sir = convertJsonToServiceInstanceRequest(requestJSON, action, startTime, sir, msoRequest, requestId, requestUri);
1750 String requestScope = deriveRequestScope(action,sir, requestUri);
1751 InfraActiveRequests currentActiveReq = msoRequest.createRequestObject ( sir, action, requestId, Status.IN_PROGRESS, requestJSON, requestScope);
1752 if(sir.getRequestDetails().getRequestParameters() != null){
1753 aLaCarte = sir.getRequestDetails().getRequestParameters().getALaCarte();
1755 parseRequest(sir, instanceIdMap, action, version, requestJSON, aLaCarte, requestId, currentActiveReq);
1756 setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
1757 String instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();
1759 InfraActiveRequests dup = null;
1761 dup = duplicateCheck(action, instanceIdMap, startTime, msoRequest, instanceName,requestScope, currentActiveReq);
1763 if (instanceIdMap != null && dup != null) {
1764 buildErrorOnDuplicateRecord(currentActiveReq, action, instanceIdMap, startTime, msoRequest, instanceName, requestScope, dup);
1767 ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
1768 RequestReferences referencesResponse = new RequestReferences();
1769 referencesResponse.setRequestId(requestId);
1770 serviceResponse.setRequestReferences(referencesResponse);
1773 String orchestrationUri = env.getProperty(CommonConstants.ALACARTE_ORCHESTRATION);
1774 String timeOut = env.getProperty(CommonConstants.ALACARTE_RECIPE_TIMEOUT);
1776 if (StringUtils.isBlank(orchestrationUri) || StringUtils.isBlank(timeOut)) {
1777 String error = StringUtils.isBlank(orchestrationUri) ? "ALaCarte Orchestration URI not found in properties" : "ALaCarte Recipe Timeout not found in properties";
1779 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, MsoLogger.ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1782 ValidateException validateException = new ValidateException.Builder(error, HttpStatus.SC_NOT_FOUND, ErrorNumbers.SVC_GENERAL_SERVICE_ERROR)
1783 .errorInfo(errorLoggerInfo).build();
1785 updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1787 throw validateException;
1791 serviceInstanceId = "";
1792 String configurationId = "";
1793 String correlationId = "";
1795 if(sir.getServiceInstanceId () != null){
1796 serviceInstanceId = sir.getServiceInstanceId ();
1799 if(sir.getConfigurationId() != null){
1800 configurationId = sir.getConfigurationId();
1803 correlationId = getCorrelationId(sir);
1806 infraActiveRequestsClient.save(currentActiveReq);
1807 }catch(Exception e){
1808 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, MsoLogger.ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1809 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e)
1810 .errorInfo(errorLoggerInfo).build();
1813 if(!requestScope.equalsIgnoreCase(ModelType.service.name())){
1815 }else if(aLaCarte == null){
1818 RequestClientParameter requestClientParameter = null;
1820 requestClientParameter = new RequestClientParameter.Builder()
1821 .setRequestId(requestId)
1822 .setBaseVfModule(false)
1823 .setRecipeTimeout(Integer.parseInt(timeOut))
1824 .setRequestAction(action.toString())
1825 .setServiceInstanceId(serviceInstanceId)
1826 .setCorrelationId(correlationId)
1827 .setConfigurationId(configurationId)
1828 .setRequestDetails(mapJSONtoMSOStyle(requestJSON, sir, aLaCarte, action))
1829 .setApiVersion(apiVersion)
1830 .setALaCarte(aLaCarte)
1831 .setRequestUri(requestUri).build();
1832 } catch (IOException e) {
1833 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1834 throw new ValidateException.Builder("Unable to generate RequestClientParamter object" + e.getMessage(), HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER)
1835 .errorInfo(errorLoggerInfo).build();
1838 return postBPELRequest(currentActiveReq, requestClientParameter, orchestrationUri, requestScope);
1841 public String getRequestId(ContainerRequestContext requestContext) throws ValidateException {
1842 String requestId = null;
1843 if (requestContext.getProperty("requestId") != null) {
1844 requestId = requestContext.getProperty("requestId").toString();
1846 if (UUIDChecker.isValidUUID(requestId)) {
1849 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1850 ValidateException validateException = new ValidateException.Builder("Request Id " + requestId + " is not a valid UUID", HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER)
1851 .errorInfo(errorLoggerInfo).build();
1853 throw validateException;
1856 public void updateStatus(InfraActiveRequests aq, Status status, String errorMessage) throws RequestDbFailureException{
1857 if ((status == Status.FAILED) || (status == Status.COMPLETE)) {
1858 aq.setStatusMessage (errorMessage);
1859 aq.setProgress(new Long(100));
1860 aq.setRequestStatus(status.toString());
1861 Timestamp endTimeStamp = new Timestamp (System.currentTimeMillis());
1862 aq.setEndTime (endTimeStamp);
1864 infraActiveRequestsClient.save(aq);
1865 }catch(Exception e){
1866 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, MsoLogger.ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1867 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e)
1868 .errorInfo(errorLoggerInfo).build();