2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
7 * ================================================================================
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ============LICENSE_END=========================================================
22 package org.onap.so.apihandlerinfra;
25 import com.fasterxml.jackson.annotation.JsonInclude.Include;
26 import com.fasterxml.jackson.core.JsonParseException;
27 import com.fasterxml.jackson.core.JsonProcessingException;
28 import com.fasterxml.jackson.databind.JsonMappingException;
29 import com.fasterxml.jackson.databind.ObjectMapper;
30 import io.swagger.annotations.Api;
31 import io.swagger.annotations.ApiOperation;
32 import org.apache.commons.lang.StringUtils;
33 import org.apache.http.HttpResponse;
34 import org.apache.http.HttpStatus;
35 import org.onap.logging.ref.slf4j.ONAPLogConstants;
36 import org.onap.so.apihandler.camundabeans.CamundaResponse;
37 import org.onap.so.apihandler.common.CommonConstants;
38 import org.onap.so.apihandler.common.ErrorNumbers;
39 import org.onap.so.apihandler.common.RequestClient;
40 import org.onap.so.apihandler.common.RequestClientFactory;
41 import org.onap.so.apihandler.common.RequestClientParameter;
42 import org.onap.so.apihandler.common.ResponseBuilder;
43 import org.onap.so.apihandler.common.ResponseHandler;
44 import org.onap.so.apihandlerinfra.exceptions.ApiException;
45 import org.onap.so.apihandlerinfra.exceptions.BPMNFailureException;
46 import org.onap.so.apihandlerinfra.exceptions.ClientConnectionException;
47 import org.onap.so.apihandlerinfra.exceptions.DuplicateRequestException;
48 import org.onap.so.apihandlerinfra.exceptions.RecipeNotFoundException;
49 import org.onap.so.apihandlerinfra.exceptions.RequestDbFailureException;
50 import org.onap.so.apihandlerinfra.exceptions.ValidateException;
51 import org.onap.so.apihandlerinfra.exceptions.VfModuleNotFoundException;
52 import org.onap.so.apihandlerinfra.logging.ErrorLoggerInfo;
53 import org.onap.so.db.catalog.beans.NetworkResource;
54 import org.onap.so.db.catalog.beans.Recipe;
55 import org.onap.so.db.catalog.beans.ServiceRecipe;
56 import org.onap.so.db.catalog.beans.VfModule;
57 import org.onap.so.db.catalog.beans.VfModuleCustomization;
58 import org.onap.so.db.catalog.beans.VnfRecipe;
59 import org.onap.so.db.catalog.beans.VnfResource;
60 import org.onap.so.db.catalog.beans.VnfResourceCustomization;
61 import org.onap.so.db.catalog.client.CatalogDbClient;
62 import org.onap.so.db.request.beans.InfraActiveRequests;
63 import org.onap.so.db.request.client.RequestsDbClient;
64 import org.onap.so.exceptions.ValidationException;
65 import org.onap.so.logger.MessageEnum;
66 import org.onap.so.logger.MsoLogger;
67 import org.onap.so.serviceinstancebeans.CloudConfiguration;
68 import org.onap.so.serviceinstancebeans.ModelInfo;
69 import org.onap.so.serviceinstancebeans.ModelType;
70 import org.onap.so.serviceinstancebeans.Networks;
71 import org.onap.so.serviceinstancebeans.RelatedInstance;
72 import org.onap.so.serviceinstancebeans.RelatedInstanceList;
73 import org.onap.so.serviceinstancebeans.RequestDetails;
74 import org.onap.so.serviceinstancebeans.RequestParameters;
75 import org.onap.so.serviceinstancebeans.RequestReferences;
76 import org.onap.so.serviceinstancebeans.Service;
77 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
78 import org.onap.so.serviceinstancebeans.ServiceInstancesResponse;
79 import org.onap.so.serviceinstancebeans.VfModules;
80 import org.onap.so.serviceinstancebeans.Vnfs;
81 import org.onap.so.utils.UUIDChecker;
82 import org.springframework.beans.factory.annotation.Autowired;
83 import org.springframework.core.env.Environment;
84 import org.springframework.stereotype.Component;
86 import javax.transaction.Transactional;
87 import javax.ws.rs.Consumes;
88 import javax.ws.rs.DELETE;
89 import javax.ws.rs.POST;
90 import javax.ws.rs.PUT;
91 import javax.ws.rs.Path;
92 import javax.ws.rs.PathParam;
93 import javax.ws.rs.Produces;
94 import javax.ws.rs.container.ContainerRequestContext;
95 import javax.ws.rs.core.Context;
96 import javax.ws.rs.core.MediaType;
97 import javax.ws.rs.core.MultivaluedMap;
98 import javax.ws.rs.core.Response;
99 import java.io.IOException;
101 import java.sql.Timestamp;
102 import java.util.ArrayList;
103 import java.util.HashMap;
104 import java.util.List;
105 import java.util.Map;
106 import java.util.Optional;
109 @Path("/onap/so/infra/serviceInstantiation")
110 @Api(value="/onap/so/infra/serviceInstantiation",description="Infrastructure API Requests for Service Instances")
111 public class ServiceInstances {
113 private static MsoLogger msoLogger = MsoLogger.getMsoLogger (MsoLogger.Catalog.APIH,MsoRequest.class);
114 private static String NAME = "name";
115 private static String VALUE = "value";
116 private static final String SAVE_TO_DB = "save instance to db";
119 private Environment env;
122 private RequestClientFactory reqClientFactory;
125 private CatalogDbClient catalogDbClient;
128 private RequestsDbClient infraActiveRequestsClient;
131 private ResponseBuilder builder;
134 private MsoRequest msoRequest;
137 @Path("/{version:[vV][5-7]}/serviceInstances")
138 @Consumes(MediaType.APPLICATION_JSON)
139 @Produces(MediaType.APPLICATION_JSON)
140 @ApiOperation(value="Create a Service Instance on a version provided",response=Response.class)
142 public Response createServiceInstance(String request, @PathParam("version") String version, @Context ContainerRequestContext requestContext) throws ApiException {
143 String requestId = getRequestId(requestContext);
144 return serviceInstances(request, Action.createInstance, null, version, requestId, getRequestUri(requestContext));
148 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/activate")
149 @Consumes(MediaType.APPLICATION_JSON)
150 @Produces(MediaType.APPLICATION_JSON)
151 @ApiOperation(value="Activate provided Service Instance",response=Response.class)
153 public Response activateServiceInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
154 String requestId = getRequestId(requestContext);
155 HashMap<String, String> instanceIdMap = new HashMap<>();
156 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
157 return serviceInstances(request, Action.activateInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
161 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/deactivate")
162 @Consumes(MediaType.APPLICATION_JSON)
163 @Produces(MediaType.APPLICATION_JSON)
164 @ApiOperation(value="Deactivate provided Service Instance",response=Response.class)
166 public Response deactivateServiceInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
167 String requestId = getRequestId(requestContext);
168 HashMap<String, String> instanceIdMap = new HashMap<>();
169 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
170 return serviceInstances(request, Action.deactivateInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
174 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}")
175 @Consumes(MediaType.APPLICATION_JSON)
176 @Produces(MediaType.APPLICATION_JSON)
177 @ApiOperation(value="Delete provided Service Instance",response=Response.class)
179 public Response deleteServiceInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
180 String requestId = getRequestId(requestContext);
181 HashMap<String, String> instanceIdMap = new HashMap<>();
182 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
183 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
187 @Path("/{version:[vV][7]}/serviceInstances/assign")
188 @Consumes(MediaType.APPLICATION_JSON)
189 @Produces(MediaType.APPLICATION_JSON)
190 @ApiOperation(value="Assign Service Instance", response=Response.class)
192 public Response assignServiceInstance(String request, @PathParam("version") String version, @Context ContainerRequestContext requestContext) throws ApiException {
193 String requestId = getRequestId(requestContext);
194 return serviceInstances(request, Action.assignInstance, null, version, requestId, getRequestUri(requestContext));
198 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/unassign")
199 @Consumes(MediaType.APPLICATION_JSON)
200 @Produces(MediaType.APPLICATION_JSON)
201 @ApiOperation(value="Unassign Service Instance", response=Response.class)
203 public Response unassignServiceInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
204 String requestId = getRequestId(requestContext);
205 HashMap<String, String> instanceIdMap = new HashMap<String,String>();
206 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
207 return serviceInstances(request, Action.unassignInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
211 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations")
212 @Consumes(MediaType.APPLICATION_JSON)
213 @Produces(MediaType.APPLICATION_JSON)
214 @ApiOperation(value="Create Port Mirroring Configuration",response=Response.class)
216 public Response createPortConfiguration(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
217 String requestId = getRequestId(requestContext);
218 HashMap<String, String> instanceIdMap = new HashMap<>();
219 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
220 return configurationRecipeLookup(request, Action.createInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
224 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}")
225 @Consumes(MediaType.APPLICATION_JSON)
226 @Produces(MediaType.APPLICATION_JSON)
227 @ApiOperation(value="Delete provided Port",response=Response.class)
229 public Response deletePortConfiguration(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
230 @PathParam("configurationInstanceId") String configurationInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
231 String requestId = getRequestId(requestContext);
232 HashMap<String, String> instanceIdMap = new HashMap<>();
233 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
234 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
235 return configurationRecipeLookup(request, Action.deleteInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
239 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/enablePort")
240 @Consumes(MediaType.APPLICATION_JSON)
241 @Produces(MediaType.APPLICATION_JSON)
242 @ApiOperation(value="Enable Port Mirroring",response=Response.class)
244 public Response enablePort(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
245 @PathParam("configurationInstanceId") String configurationInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
246 String requestId = getRequestId(requestContext);
247 HashMap<String, String> instanceIdMap = new HashMap<>();
248 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
249 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
250 return configurationRecipeLookup(request, Action.enablePort, instanceIdMap, version, requestId, getRequestUri(requestContext));
254 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/disablePort")
255 @Consumes(MediaType.APPLICATION_JSON)
256 @Produces(MediaType.APPLICATION_JSON)
257 @ApiOperation(value="Disable Port Mirroring",response=Response.class)
259 public Response disablePort(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
260 @PathParam("configurationInstanceId") String configurationInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
261 String requestId = getRequestId(requestContext);
262 HashMap<String, String> instanceIdMap = new HashMap<>();
263 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
264 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
265 return configurationRecipeLookup(request, Action.disablePort, instanceIdMap, version, requestId, getRequestUri(requestContext));
269 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/activate")
270 @Consumes(MediaType.APPLICATION_JSON)
271 @Produces(MediaType.APPLICATION_JSON)
272 @ApiOperation(value="Activate Port Mirroring",response=Response.class)
274 public Response activatePort(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
275 @PathParam("configurationInstanceId") String configurationInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
276 String requestId = getRequestId(requestContext);
277 HashMap<String, String> instanceIdMap = new HashMap<>();
278 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
279 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
280 return configurationRecipeLookup(request, Action.activateInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
284 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/deactivate")
285 @Consumes(MediaType.APPLICATION_JSON)
286 @Produces(MediaType.APPLICATION_JSON)
287 @ApiOperation(value="Deactivate Port Mirroring",response=Response.class)
289 public Response deactivatePort(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
290 @PathParam("configurationInstanceId") String configurationInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
291 String requestId = getRequestId(requestContext);
292 HashMap<String, String> instanceIdMap = new HashMap<>();
293 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
294 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
295 return configurationRecipeLookup(request, Action.deactivateInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
299 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/addRelationships")
300 @Consumes(MediaType.APPLICATION_JSON)
301 @Produces(MediaType.APPLICATION_JSON)
302 @ApiOperation(value="Add Relationships to a Service Instance",response=Response.class)
304 public Response addRelationships(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
305 String requestId = getRequestId(requestContext);
306 HashMap<String, String> instanceIdMap = new HashMap<>();
307 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
308 return configurationRecipeLookup(request, Action.addRelationships, instanceIdMap, version, requestId, getRequestUri(requestContext));
312 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/removeRelationships")
313 @Consumes(MediaType.APPLICATION_JSON)
314 @Produces(MediaType.APPLICATION_JSON)
315 @ApiOperation(value="Remove Relationships from Service Instance",response=Response.class)
317 public Response removeRelationships(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
318 String requestId = getRequestId(requestContext);
319 HashMap<String, String> instanceIdMap = new HashMap<>();
320 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
321 return configurationRecipeLookup(request, Action.removeRelationships, instanceIdMap, version, requestId, getRequestUri(requestContext));
325 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs")
326 @Consumes(MediaType.APPLICATION_JSON)
327 @Produces(MediaType.APPLICATION_JSON)
328 @ApiOperation(value="Create VNF on a specified version and serviceInstance",response=Response.class)
330 public Response createVnfInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
331 String requestId = getRequestId(requestContext);
332 HashMap<String, String> instanceIdMap = new HashMap<>();
333 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
334 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
338 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/replace")
339 @Consumes(MediaType.APPLICATION_JSON)
340 @Produces(MediaType.APPLICATION_JSON)
341 @ApiOperation(value="Replace provided VNF instance",response=Response.class)
343 public Response replaceVnfInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
344 @PathParam("vnfInstanceId") String vnfInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
345 String requestId = getRequestId(requestContext);
346 HashMap<String, String> instanceIdMap = new HashMap<>();
347 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
348 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
349 return serviceInstances(request, Action.replaceInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
353 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}")
354 @Consumes(MediaType.APPLICATION_JSON)
355 @Produces(MediaType.APPLICATION_JSON)
356 @ApiOperation(value="Update VNF on a specified version, serviceInstance and vnfInstance",response=Response.class)
358 public Response updateVnfInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
359 @PathParam("vnfInstanceId") String vnfInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
360 String requestId = getRequestId(requestContext);
361 HashMap<String, String> instanceIdMap = new HashMap<>();
362 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
363 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
364 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
368 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/applyUpdatedConfig")
369 @Consumes(MediaType.APPLICATION_JSON)
370 @Produces(MediaType.APPLICATION_JSON)
371 @ApiOperation(value="Apply updated configuration",response=Response.class)
372 public Response applyUpdatedConfig(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
373 @PathParam("vnfInstanceId") String vnfInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
374 String requestId = getRequestId(requestContext);
375 HashMap<String, String> instanceIdMap = new HashMap<>();
376 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
377 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
378 return serviceInstances(request, Action.applyUpdatedConfig, instanceIdMap, version, requestId, getRequestUri(requestContext));
382 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/recreate")
383 @Consumes(MediaType.APPLICATION_JSON)
384 @Produces(MediaType.APPLICATION_JSON)
385 @ApiOperation(value="Recreate VNF Instance",response=Response.class)
386 public Response recreateVnfInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
387 @PathParam("vnfInstanceId") String vnfInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
388 String requestId = getRequestId(requestContext);
389 HashMap<String, String> instanceIdMap = new HashMap<>();
390 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
391 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
392 return serviceInstances(request, Action.recreateInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
397 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}")
398 @Consumes(MediaType.APPLICATION_JSON)
399 @Produces(MediaType.APPLICATION_JSON)
400 @ApiOperation(value="Delete provided VNF instance",response=Response.class)
402 public Response deleteVnfInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
403 @PathParam("vnfInstanceId") String vnfInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
404 String requestId = getRequestId(requestContext);
405 HashMap<String, String> instanceIdMap = new HashMap<>();
406 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
407 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
408 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
412 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules")
413 @Consumes(MediaType.APPLICATION_JSON)
414 @Produces(MediaType.APPLICATION_JSON)
415 @ApiOperation(value="Create VfModule on a specified version, serviceInstance and vnfInstance",response=Response.class)
417 public Response createVfModuleInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
418 @PathParam("vnfInstanceId") String vnfInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
419 String requestId = getRequestId(requestContext);
420 HashMap<String, String> instanceIdMap = new HashMap<>();
421 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
422 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
423 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
427 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/replace")
428 @Consumes(MediaType.APPLICATION_JSON)
429 @Produces(MediaType.APPLICATION_JSON)
430 @ApiOperation(value="Create VfModule on a specified version, serviceInstance and vnfInstance",response=Response.class)
432 public Response replaceVfModuleInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
433 @PathParam("vnfInstanceId") String vnfInstanceId,
434 @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
435 String requestId = getRequestId(requestContext);
436 HashMap<String, String> instanceIdMap = new HashMap<>();
437 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
438 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
439 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
440 return serviceInstances(request, Action.replaceInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
444 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}")
445 @Consumes(MediaType.APPLICATION_JSON)
446 @Produces(MediaType.APPLICATION_JSON)
447 @ApiOperation(value="Update VfModule on a specified version, serviceInstance, vnfInstance and vfModule",response=Response.class)
449 public Response updateVfModuleInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
450 @PathParam("vnfInstanceId") String vnfInstanceId,
451 @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
452 String requestId = getRequestId(requestContext);
453 HashMap<String, String> instanceIdMap = new HashMap<>();
454 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
455 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
456 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
457 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
461 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/inPlaceSoftwareUpdate")
462 @Consumes(MediaType.APPLICATION_JSON)
463 @Produces(MediaType.APPLICATION_JSON)
464 @ApiOperation(value="Perform VNF software update",response=Response.class)
466 public Response inPlaceSoftwareUpdate(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
467 @PathParam("vnfInstanceId") String vnfInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
468 String requestId = getRequestId(requestContext);
469 HashMap<String, String> instanceIdMap = new HashMap<>();
470 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
471 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
472 return serviceInstances(request, Action.inPlaceSoftwareUpdate, instanceIdMap, version, requestId, getRequestUri(requestContext));
476 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}")
477 @Consumes(MediaType.APPLICATION_JSON)
478 @Produces(MediaType.APPLICATION_JSON)
479 @ApiOperation(value="Delete provided VfModule instance",response=Response.class)
481 public Response deleteVfModuleInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
482 @PathParam("vnfInstanceId") String vnfInstanceId,
483 @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
484 String requestId = getRequestId(requestContext);
485 HashMap<String, String> instanceIdMap = new HashMap<>();
486 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
487 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
488 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
489 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
493 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/deactivateAndCloudDelete")
494 @Consumes(MediaType.APPLICATION_JSON)
495 @Produces(MediaType.APPLICATION_JSON)
496 @ApiOperation(value="Deactivate and Cloud Delete VfModule instance",response=Response.class)
498 public Response deactivateAndCloudDeleteVfModuleInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
499 @PathParam("vnfInstanceId") String vnfInstanceId, @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
500 String requestId = getRequestId(requestContext);
501 HashMap<String, String> instanceIdMap = new HashMap<>();
502 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
503 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
504 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
505 Response response = serviceInstances(request, Action.deactivateAndCloudDelete, instanceIdMap, version, requestId, getRequestUri(requestContext));
510 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/scaleOut")
511 @Consumes(MediaType.APPLICATION_JSON)
512 @Produces(MediaType.APPLICATION_JSON)
513 @ApiOperation(value="VF Auto Scale Out",response=Response.class)
515 public Response scaleOutVfModule(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
516 @PathParam("vnfInstanceId") String vnfInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
517 String requestId = getRequestId(requestContext);
518 HashMap<String, String> instanceIdMap = new HashMap<>();
519 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
520 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
521 return serviceInstances(request, Action.scaleOut, instanceIdMap, version, requestId, getRequestUri(requestContext));
526 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups")
527 @Consumes(MediaType.APPLICATION_JSON)
528 @Produces(MediaType.APPLICATION_JSON)
529 @ApiOperation(value="Create VolumeGroup on a specified version, serviceInstance, vnfInstance",response=Response.class)
531 public Response createVolumeGroupInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
532 @PathParam("vnfInstanceId") String vnfInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
533 String requestId = getRequestId(requestContext);
534 HashMap<String, String> instanceIdMap = new HashMap<>();
535 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
536 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
537 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
541 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}")
542 @Consumes(MediaType.APPLICATION_JSON)
543 @Produces(MediaType.APPLICATION_JSON)
544 @ApiOperation(value="Update VolumeGroup on a specified version, serviceInstance, vnfInstance and volumeGroup",response=Response.class)
546 public Response updateVolumeGroupInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
547 @PathParam("vnfInstanceId") String vnfInstanceId,
548 @PathParam("volumeGroupInstanceId") String volumeGroupInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
549 String requestId = getRequestId(requestContext);
550 HashMap<String, String> instanceIdMap = new HashMap<>();
551 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
552 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
553 instanceIdMap.put("volumeGroupInstanceId", volumeGroupInstanceId);
554 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
558 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}")
559 @Consumes(MediaType.APPLICATION_JSON)
560 @Produces(MediaType.APPLICATION_JSON)
561 @ApiOperation(value="Delete provided VolumeGroup instance",response=Response.class)
563 public Response deleteVolumeGroupInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
564 @PathParam("vnfInstanceId") String vnfInstanceId,
565 @PathParam("volumeGroupInstanceId") String volumeGroupInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
566 String requestId = getRequestId(requestContext);
567 HashMap<String, String> instanceIdMap = new HashMap<>();
568 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
569 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
570 instanceIdMap.put("volumeGroupInstanceId", volumeGroupInstanceId);
571 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
575 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks")
576 @Consumes(MediaType.APPLICATION_JSON)
577 @Produces(MediaType.APPLICATION_JSON)
578 @ApiOperation(value="Create NetworkInstance on a specified version and serviceInstance ",response=Response.class)
580 public Response createNetworkInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
581 String requestId = getRequestId(requestContext);
582 HashMap<String, String> instanceIdMap = new HashMap<>();
583 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
584 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
588 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks/{networkInstanceId}")
589 @Consumes(MediaType.APPLICATION_JSON)
590 @Produces(MediaType.APPLICATION_JSON)
591 @ApiOperation(value="Update VolumeGroup on a specified version, serviceInstance, networkInstance",response=Response.class)
593 public Response updateNetworkInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
594 @PathParam("networkInstanceId") String networkInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
595 String requestId = getRequestId(requestContext);
596 HashMap<String, String> instanceIdMap = new HashMap<>();
597 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
598 instanceIdMap.put("networkInstanceId", networkInstanceId);
599 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
603 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks/{networkInstanceId}")
604 @Consumes(MediaType.APPLICATION_JSON)
605 @Produces(MediaType.APPLICATION_JSON)
606 @ApiOperation(value="Delete provided Network instance",response=Response.class)
608 public Response deleteNetworkInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
609 @PathParam("networkInstanceId") String networkInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
610 String requestId = getRequestId(requestContext);
611 HashMap<String, String> instanceIdMap = new HashMap<>();
612 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
613 instanceIdMap.put("networkInstanceId", networkInstanceId);
614 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
618 @Path("/{version:[vV][7]}/instanceGroups")
619 @Consumes(MediaType.APPLICATION_JSON)
620 @Produces(MediaType.APPLICATION_JSON)
621 @ApiOperation(value="Create instanceGroups",response=Response.class)
623 public Response createInstanceGroups(String request, @PathParam("version") String version, @Context ContainerRequestContext requestContext) throws ApiException {
624 String requestId = getRequestId(requestContext);
625 return serviceInstances(request, Action.createInstance, null, version, requestId, getRequestUri(requestContext));
629 @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}")
630 @Consumes(MediaType.APPLICATION_JSON)
631 @Produces(MediaType.APPLICATION_JSON)
632 @ApiOperation(value="Delete instanceGroup",response=Response.class)
634 public Response deleteInstanceGroups(@PathParam("version") String version, @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext) throws ApiException {
635 String requestId = getRequestId(requestContext);
636 HashMap<String, String> instanceIdMap = new HashMap<>();
637 instanceIdMap.put(CommonConstants.INSTANCE_GROUP_ID, instanceGroupId);
638 return deleteInstanceGroups(Action.deleteInstance, instanceIdMap, version, requestId, getRequestUri(requestContext), requestContext);
642 @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}/addMembers")
643 @Consumes(MediaType.APPLICATION_JSON)
644 @Produces(MediaType.APPLICATION_JSON)
645 @ApiOperation(value="Add instanceGroup members",response=Response.class)
647 public Response addInstanceGroupMembers(String request, @PathParam("version") String version, @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext) throws ApiException {
648 String requestId = getRequestId(requestContext);
649 HashMap<String, String> instanceIdMap = new HashMap<>();
650 instanceIdMap.put(CommonConstants.INSTANCE_GROUP_ID, instanceGroupId);
651 return serviceInstances(request, Action.addMembers, instanceIdMap, version, requestId, getRequestUri(requestContext));
655 @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}/removeMembers")
656 @Consumes(MediaType.APPLICATION_JSON)
657 @Produces(MediaType.APPLICATION_JSON)
658 @ApiOperation(value="Remove instanceGroup members",response=Response.class)
660 public Response removeInstanceGroupMembers(String request, @PathParam("version") String version, @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext) throws ApiException {
661 String requestId = getRequestId(requestContext);
662 HashMap<String, String> instanceIdMap = new HashMap<>();
663 instanceIdMap.put(CommonConstants.INSTANCE_GROUP_ID, instanceGroupId);
664 return serviceInstances(request, Action.removeMembers, instanceIdMap, version, requestId, getRequestUri(requestContext));
667 public String getRequestUri(ContainerRequestContext context){
668 String requestUri = context.getUriInfo().getPath();
669 requestUri = requestUri.substring(requestUri.indexOf("/serviceInstantiation/") + 22);
673 public void validateHeaders(ContainerRequestContext context) throws ValidationException{
674 MultivaluedMap<String, String> headers = context.getHeaders();
675 if(!headers.containsKey(ONAPLogConstants.Headers.REQUEST_ID)){
676 throw new ValidationException(ONAPLogConstants.Headers.REQUEST_ID + " header", true);
678 if(!headers.containsKey(ONAPLogConstants.Headers.PARTNER_NAME)){
679 throw new ValidationException(ONAPLogConstants.Headers.PARTNER_NAME + " header", true);
681 if(!headers.containsKey(MsoLogger.REQUESTOR_ID)){
682 throw new ValidationException(MsoLogger.REQUESTOR_ID + " header", true);
686 public Response serviceInstances(String requestJSON, Actions action, HashMap<String, String> instanceIdMap, String version, String requestId, String requestUri) throws ApiException {
687 String serviceInstanceId = (instanceIdMap ==null)? null:instanceIdMap.get("serviceInstanceId");
688 Boolean aLaCarte = null;
689 long startTime = System.currentTimeMillis ();
690 ServiceInstancesRequest sir = null;
691 String apiVersion = version.substring(1);
693 sir = convertJsonToServiceInstanceRequest(requestJSON, action, startTime, sir, msoRequest, requestId, requestUri);
694 String requestScope = deriveRequestScope(action, sir, requestUri);
695 InfraActiveRequests currentActiveReq = msoRequest.createRequestObject (sir, action, requestId, Status.IN_PROGRESS, requestJSON, requestScope);
696 if(sir.getRequestDetails().getRequestParameters() != null){
697 aLaCarte = sir.getRequestDetails().getRequestParameters().getALaCarte();
699 parseRequest(sir, instanceIdMap, action, version, requestJSON, aLaCarte, requestId, currentActiveReq);
700 setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
702 int requestVersion = Integer.parseInt(version.substring(1));
703 String instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();
704 boolean alaCarteFlag = msoRequest.getAlacarteFlag(sir);
705 String vnfType = msoRequest.getVnfType(sir,requestScope,action,requestVersion);
706 String networkType = msoRequest.getNetworkType(sir,requestScope);
707 String sdcServiceModelVersion = msoRequest.getSDCServiceModelVersion(sir);
708 String vfModuleType = msoRequest.getVfModuleType(sir,requestScope,action,requestVersion);
710 if(requestScope.equalsIgnoreCase(ModelType.vnf.name()) && vnfType != null){
711 currentActiveReq.setVnfType(vnfType);
712 }else if(requestScope.equalsIgnoreCase(ModelType.network.name()) && networkType != null){
713 currentActiveReq.setNetworkType(networkType);
716 InfraActiveRequests dup = null;
719 dup = duplicateCheck(action, instanceIdMap, startTime, msoRequest, instanceName,requestScope, currentActiveReq);
722 buildErrorOnDuplicateRecord(currentActiveReq, action, instanceIdMap, startTime, msoRequest, instanceName, requestScope, dup);
724 ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
726 RequestReferences referencesResponse = new RequestReferences();
728 referencesResponse.setRequestId(requestId);
730 serviceResponse.setRequestReferences(referencesResponse);
731 Boolean isBaseVfModule = false;
733 RecipeLookupResult recipeLookupResult = getServiceInstanceOrchestrationURI(sir, action, alaCarteFlag, currentActiveReq);
734 String serviceInstanceType = getServiceType(requestScope, sir, alaCarteFlag);
736 ModelInfo modelInfo = sir.getRequestDetails().getModelInfo();
737 if (action == Action.applyUpdatedConfig || action == Action.inPlaceSoftwareUpdate) {
738 modelType = ModelType.vnf;
739 }else if(action == Action.addMembers || action == Action.removeMembers){
740 modelType = ModelType.instanceGroup;
742 modelType =modelInfo.getModelType();
745 if (modelType.equals(ModelType.vfModule)) {
748 // Get VF Module-specific base module indicator
751 String modelVersionId = modelInfo.getModelVersionId();
753 if(modelVersionId != null) {
754 vfm = catalogDbClient.getVfModuleByModelUUID(modelVersionId);
755 } else if(modelInfo.getModelInvariantId() != null && modelInfo.getModelVersion() != null){
756 vfm = catalogDbClient.getVfModuleByModelInvariantUUIDAndModelVersion(modelInfo.getModelInvariantId(), modelInfo.getModelVersion());
760 if (vfm.getIsBase()) {
761 isBaseVfModule = true;
763 } else if (action == Action.createInstance || action == Action.updateInstance) {
764 // There is no entry for this vfModuleType with this version, if specified, in VF_MODULE table in Catalog DB.
765 // This request cannot proceed
767 String serviceVersionText = "";
768 if (sdcServiceModelVersion != null && !sdcServiceModelVersion.isEmpty ()) {
769 serviceVersionText = " with version " + sdcServiceModelVersion;
772 String errorMessage = "VnfType " + vnfType + " and VF Module Model Name " + modelInfo.getModelName() + serviceVersionText + " not found in MSO Catalog DB";
773 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, MsoLogger.ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
774 VfModuleNotFoundException vfModuleException = new VfModuleNotFoundException.Builder(errorMessage, HttpStatus.SC_NOT_FOUND, ErrorNumbers.SVC_BAD_PARAMETER).errorInfo(errorLoggerInfo).build();
775 updateStatus(currentActiveReq, Status.FAILED, vfModuleException.getMessage());
777 throw vfModuleException;
782 serviceInstanceId = "";
784 String vfModuleId = "";
785 String volumeGroupId = "";
786 String networkId = "";
787 String correlationId = "";
788 String instanceGroupId = null;
789 if(sir.getServiceInstanceId () != null){
790 serviceInstanceId = sir.getServiceInstanceId ();
793 if(sir.getVnfInstanceId () != null){
794 vnfId = sir.getVnfInstanceId ();
797 if(sir.getVfModuleInstanceId () != null){
798 vfModuleId = sir.getVfModuleInstanceId ();
801 if(sir.getVolumeGroupInstanceId () != null){
802 volumeGroupId = sir.getVolumeGroupInstanceId ();
805 if(sir.getNetworkInstanceId () != null){
806 networkId = sir.getNetworkInstanceId ();
808 if(sir.getInstanceGroupId() != null){
809 instanceGroupId = sir.getInstanceGroupId();
812 correlationId = getCorrelationId(sir);
815 infraActiveRequestsClient.save(currentActiveReq);
817 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, MsoLogger.ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
818 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e)
819 .errorInfo(errorLoggerInfo).build();
822 if(!requestScope.equalsIgnoreCase(ModelType.service.name()) && action != Action.recreateInstance){
824 }else if(aLaCarte == null){
828 RequestClientParameter requestClientParameter = null;
830 requestClientParameter = new RequestClientParameter.Builder()
831 .setRequestId(requestId)
832 .setBaseVfModule(isBaseVfModule)
833 .setRecipeTimeout(recipeLookupResult.getRecipeTimeout())
834 .setRequestAction(action.toString())
835 .setServiceInstanceId(serviceInstanceId)
836 .setCorrelationId(correlationId)
838 .setVfModuleId(vfModuleId)
839 .setVolumeGroupId(volumeGroupId)
840 .setNetworkId(networkId)
841 .setServiceType(serviceInstanceType)
843 .setVfModuleType(vfModuleType)
844 .setNetworkType(networkType)
845 .setRequestDetails(mapJSONtoMSOStyle(requestJSON, sir, aLaCarte, action))
846 .setApiVersion(apiVersion)
847 .setALaCarte(aLaCarte)
848 .setRequestUri(requestUri)
849 .setInstanceGroupId(instanceGroupId).build();
850 } catch (IOException e) {
851 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
852 throw new ValidateException.Builder("Unable to generate RequestClientParamter object" + e.getMessage(), HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER)
853 .errorInfo(errorLoggerInfo).build();
855 return postBPELRequest(currentActiveReq, requestClientParameter, recipeLookupResult.getOrchestrationURI(), requestScope);
857 public Response deleteInstanceGroups(Actions action, HashMap<String, String> instanceIdMap, String version, String requestId, String requestUri, ContainerRequestContext requestContext) throws ApiException {
858 String instanceGroupId = instanceIdMap.get(CommonConstants.INSTANCE_GROUP_ID);
859 Boolean aLaCarte = true;
860 long startTime = System.currentTimeMillis ();
861 String apiVersion = version.substring(1);
862 ServiceInstancesRequest sir = new ServiceInstancesRequest();
863 sir.setInstanceGroupId(instanceGroupId);
865 String requestScope = ModelType.instanceGroup.toString();
866 InfraActiveRequests currentActiveReq = msoRequest.createRequestObject (sir, action, requestId, Status.IN_PROGRESS, null, requestScope);
867 setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
869 validateHeaders(requestContext);
870 } catch (ValidationException e) {
872 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_VALIDATION_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
873 ValidateException validateException = new ValidateException.Builder(e.getMessage(), HttpStatus.SC_BAD_REQUEST, ErrorNumbers.SVC_BAD_PARAMETER).cause(e)
874 .errorInfo(errorLoggerInfo).build();
875 updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
876 throw validateException;
879 InfraActiveRequests dup = duplicateCheck(action, instanceIdMap, startTime, msoRequest, null, requestScope, currentActiveReq);
882 buildErrorOnDuplicateRecord(currentActiveReq, action, instanceIdMap, startTime, msoRequest, null, requestScope, dup);
885 ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
887 RequestReferences referencesResponse = new RequestReferences();
889 referencesResponse.setRequestId(requestId);
891 serviceResponse.setRequestReferences(referencesResponse);
892 Boolean isBaseVfModule = false;
894 RecipeLookupResult recipeLookupResult = new RecipeLookupResult("/mso/async/services/WorkflowActionBB", 180);
897 infraActiveRequestsClient.save(currentActiveReq);
899 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, MsoLogger.ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
900 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e)
901 .errorInfo(errorLoggerInfo).build();
904 RequestClientParameter requestClientParameter = new RequestClientParameter.Builder()
905 .setRequestId(requestId)
906 .setBaseVfModule(isBaseVfModule)
907 .setRecipeTimeout(recipeLookupResult.getRecipeTimeout())
908 .setRequestAction(action.toString())
909 .setApiVersion(apiVersion)
910 .setALaCarte(aLaCarte)
911 .setRequestUri(requestUri)
912 .setInstanceGroupId(instanceGroupId).build();
914 return postBPELRequest(currentActiveReq, requestClientParameter, recipeLookupResult.getOrchestrationURI(), requestScope);
917 private String getCorrelationId(ServiceInstancesRequest sir) {
918 return Optional.of(sir)
919 .map(ServiceInstancesRequest::getRequestDetails)
920 .map(RequestDetails::getRequestParameters)
921 .map(parameters -> parameters.getUserParamValue("pnfId"))
925 private String deriveRequestScope(Actions action, ServiceInstancesRequest sir, String requestUri) {
926 if(action == Action.inPlaceSoftwareUpdate || action == Action.applyUpdatedConfig){
927 return (ModelType.vnf.name());
928 }else if(action == Action.addMembers || action == Action.removeMembers){
929 return(ModelType.instanceGroup.toString());
932 if(sir.getRequestDetails().getModelInfo().getModelType() == null){
933 requestScope = requestScopeFromUri(requestUri);
935 requestScope = sir.getRequestDetails().getModelInfo().getModelType().name();
940 private String requestScopeFromUri(String requestUri){
942 if(requestUri.contains(ModelType.network.name())){
943 requestScope = ModelType.network.name();
944 }else if(requestUri.contains(ModelType.vfModule.name())){
945 requestScope = ModelType.vfModule.name();
946 }else if(requestUri.contains(ModelType.volumeGroup.name())){
947 requestScope = ModelType.volumeGroup.name();
948 }else if(requestUri.contains(ModelType.configuration.name())){
949 requestScope = ModelType.configuration.name();
950 }else if(requestUri.contains(ModelType.vnf.name())){
951 requestScope = ModelType.vnf.name();
953 requestScope = ModelType.service.name();
957 private Response postBPELRequest(InfraActiveRequests currentActiveReq, RequestClientParameter requestClientParameter, String orchestrationUri, String requestScope)throws ApiException {
958 RequestClient requestClient = null;
959 HttpResponse response = null;
961 requestClient = reqClientFactory.getRequestClient (orchestrationUri);
962 response = requestClient.post(requestClientParameter);
963 } catch (Exception e) {
965 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MsoLogger.ErrorCode.AvailabilityError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
966 String url = requestClient != null ? requestClient.getUrl() : "";
967 ClientConnectionException clientException = new ClientConnectionException.Builder(url, HttpStatus.SC_BAD_GATEWAY, ErrorNumbers.SVC_NO_SERVER_RESOURCES).cause(e).errorInfo(errorLoggerInfo).build();
968 updateStatus(currentActiveReq, Status.FAILED, clientException.getMessage());
970 throw clientException;
973 if (response == null) {
975 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MsoLogger.ErrorCode.BusinessProcesssError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
976 ClientConnectionException clientException = new ClientConnectionException.Builder(requestClient.getUrl(), HttpStatus.SC_BAD_GATEWAY, ErrorNumbers.SVC_NO_SERVER_RESOURCES).errorInfo(errorLoggerInfo).build();
978 updateStatus(currentActiveReq, Status.FAILED, clientException.getMessage());
980 throw clientException;
983 ResponseHandler respHandler = null;
984 int bpelStatus = 500;
986 respHandler = new ResponseHandler (response, requestClient.getType ());
987 bpelStatus = respHandler.getStatus ();
988 } catch (ApiException e) {
990 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
991 ValidateException validateException = new ValidateException.Builder("Exception caught mapping Camunda JSON response to object", HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER).cause(e)
992 .errorInfo(errorLoggerInfo).build();
993 updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
994 throw validateException;
997 // BPEL accepted the request, the request is in progress
998 if (bpelStatus == HttpStatus.SC_ACCEPTED) {
999 ServiceInstancesResponse jsonResponse;
1000 CamundaResponse camundaResp = respHandler.getResponse();
1002 if("Success".equalsIgnoreCase(camundaResp.getMessage())) {
1004 ObjectMapper mapper = new ObjectMapper();
1005 jsonResponse = mapper.readValue(camundaResp.getResponse(), ServiceInstancesResponse.class);
1006 jsonResponse.getRequestReferences().setRequestId(requestClientParameter.getRequestId());
1007 Optional<URL> selfLinkUrl = msoRequest.buildSelfLinkUrl(currentActiveReq.getRequestUrl(), requestClientParameter.getRequestId());
1008 if(selfLinkUrl.isPresent()){
1009 jsonResponse.getRequestReferences().setRequestSelfLink(selfLinkUrl.get());
1011 jsonResponse.getRequestReferences().setRequestSelfLink(null);
1013 } catch (IOException e) {
1015 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1016 ValidateException validateException = new ValidateException.Builder("Exception caught mapping Camunda JSON response to object", HttpStatus.SC_NOT_ACCEPTABLE, ErrorNumbers.SVC_BAD_PARAMETER).cause(e)
1017 .errorInfo(errorLoggerInfo).build();
1018 updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1019 throw validateException;
1021 return builder.buildResponse(HttpStatus.SC_ACCEPTED, requestClientParameter.getRequestId(), jsonResponse, requestClientParameter.getApiVersion());
1025 List<String> variables = new ArrayList<>();
1026 variables.add(bpelStatus + "");
1027 String camundaJSONResponseBody = respHandler.getResponseBody ();
1028 if (camundaJSONResponseBody != null && !camundaJSONResponseBody.isEmpty ()) {
1030 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, MsoLogger.ErrorCode.BusinessProcesssError).errorSource(requestClient.getUrl()).build();
1031 BPMNFailureException bpmnException = new BPMNFailureException.Builder(String.valueOf(bpelStatus) + camundaJSONResponseBody, bpelStatus, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR)
1032 .errorInfo(errorLoggerInfo).build();
1034 updateStatus(currentActiveReq, Status.FAILED, bpmnException.getMessage());
1036 throw bpmnException;
1039 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, MsoLogger.ErrorCode.BusinessProcesssError).errorSource(requestClient.getUrl()).build();
1042 BPMNFailureException servException = new BPMNFailureException.Builder(String.valueOf(bpelStatus), bpelStatus, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR)
1043 .errorInfo(errorLoggerInfo).build();
1044 updateStatus(currentActiveReq, Status.FAILED, servException.getMessage());
1046 throw servException;
1050 private void setInstanceId(InfraActiveRequests currentActiveReq, String requestScope, String instanceId, Map<String, String> instanceIdMap) {
1051 if(StringUtils.isNotBlank(instanceId)) {
1052 if(ModelType.service.name().equalsIgnoreCase(requestScope)) {
1053 currentActiveReq.setServiceInstanceId(instanceId);
1054 } else if(ModelType.vnf.name().equalsIgnoreCase(requestScope)) {
1055 currentActiveReq.setVnfId(instanceId);
1056 } else if(ModelType.vfModule.name().equalsIgnoreCase(requestScope)) {
1057 currentActiveReq.setVfModuleId(instanceId);
1058 } else if(ModelType.volumeGroup.name().equalsIgnoreCase(requestScope)) {
1059 currentActiveReq.setVolumeGroupId(instanceId);
1060 } else if(ModelType.network.name().equalsIgnoreCase(requestScope)) {
1061 currentActiveReq.setNetworkId(instanceId);
1062 } else if(ModelType.configuration.name().equalsIgnoreCase(requestScope)) {
1063 currentActiveReq.setConfigurationId(instanceId);
1064 }else if(ModelType.instanceGroup.toString().equalsIgnoreCase(requestScope)){
1065 currentActiveReq.setInstanceGroupId(instanceId);
1067 } else if(instanceIdMap != null && !instanceIdMap.isEmpty()) {
1068 if(instanceIdMap.get("serviceInstanceId") != null){
1069 currentActiveReq.setServiceInstanceId(instanceIdMap.get("serviceInstanceId"));
1071 if(instanceIdMap.get("vnfInstanceId") != null){
1072 currentActiveReq.setVnfId(instanceIdMap.get("vnfInstanceId"));
1074 if(instanceIdMap.get("vfModuleInstanceId") != null){
1075 currentActiveReq.setVfModuleId(instanceIdMap.get("vfModuleInstanceId"));
1077 if(instanceIdMap.get("volumeGroupInstanceId") != null){
1078 currentActiveReq.setVolumeGroupId(instanceIdMap.get("volumeGroupInstanceId"));
1080 if(instanceIdMap.get("networkInstanceId") != null){
1081 currentActiveReq.setNetworkId(instanceIdMap.get("networkInstanceId"));
1083 if(instanceIdMap.get("configurationInstanceId") != null){
1084 currentActiveReq.setConfigurationId(instanceIdMap.get("configurationInstanceId"));
1086 if(instanceIdMap.get("InstanceGroupInstanceId") != null){
1087 currentActiveReq.setInstanceGroupId(instanceIdMap.get("InstanceGroupInstanceId"));
1092 protected String mapJSONtoMSOStyle(String msoRawRequest, ServiceInstancesRequest serviceInstRequest, boolean isAlaCarte, Actions action) throws IOException {
1093 ObjectMapper mapper = new ObjectMapper();
1094 mapper.setSerializationInclusion(Include.NON_NULL);
1095 if(msoRawRequest != null){
1096 ServiceInstancesRequest sir = mapper.readValue(msoRawRequest, ServiceInstancesRequest.class);
1097 if( !isAlaCarte && Action.createInstance.equals(action) && serviceInstRequest != null &&
1098 serviceInstRequest.getRequestDetails() != null &&
1099 serviceInstRequest.getRequestDetails().getRequestParameters() != null) {
1100 sir.getRequestDetails().setCloudConfiguration(serviceInstRequest.getRequestDetails().getCloudConfiguration());
1101 sir.getRequestDetails().getRequestParameters().setUserParams(serviceInstRequest.getRequestDetails().getRequestParameters().getUserParams());
1103 msoLogger.debug("Value as string: " + mapper.writeValueAsString(sir));
1104 return mapper.writeValueAsString(sir);
1109 private void buildErrorOnDuplicateRecord(InfraActiveRequests currentActiveReq, Actions action, HashMap<String, String> instanceIdMap, long startTime, MsoRequest msoRequest,
1110 String instanceName, String requestScope, InfraActiveRequests dup) throws ApiException {
1112 // Found the duplicate record. Return the appropriate error.
1113 String instance = null;
1114 if(instanceName != null){
1115 instance = instanceName;
1117 instance = instanceIdMap.get(requestScope + "InstanceId");
1119 //List<String> variables = new ArrayList<String>();
1120 //variables.add(dup.getRequestStatus());
1121 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DUPLICATE_FOUND, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1124 DuplicateRequestException dupException = new DuplicateRequestException.Builder(requestScope,instance,dup.getRequestStatus(),dup.getRequestId(), HttpStatus.SC_CONFLICT, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR)
1125 .errorInfo(errorLoggerInfo).build();
1127 updateStatus(currentActiveReq, Status.FAILED, dupException.getMessage());
1132 private InfraActiveRequests duplicateCheck(Actions action, HashMap<String, String> instanceIdMap, long startTime,
1133 MsoRequest msoRequest, String instanceName, String requestScope, InfraActiveRequests currentActiveReq) throws ApiException {
1134 InfraActiveRequests dup = null;
1136 if(!(instanceName==null && requestScope.equals("service") && (action == Action.createInstance || action == Action.activateInstance || action == Action.assignInstance))){
1137 dup = infraActiveRequestsClient.checkInstanceNameDuplicate (instanceIdMap, instanceName, requestScope);
1139 } catch (Exception e) {
1140 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DUPLICATE_CHECK_EXC, MsoLogger.ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1141 RequestDbFailureException requestDbFailureException = new RequestDbFailureException.Builder("check for duplicate instance", e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e)
1142 .errorInfo(errorLoggerInfo).build();
1143 updateStatus(currentActiveReq, Status.FAILED, requestDbFailureException.getMessage());
1144 throw requestDbFailureException;
1149 private ServiceInstancesRequest convertJsonToServiceInstanceRequest(String requestJSON, Actions action, long startTime,
1150 ServiceInstancesRequest sir, MsoRequest msoRequest, String requestId, String requestUri) throws ApiException {
1152 ObjectMapper mapper = new ObjectMapper();
1153 return mapper.readValue(requestJSON, ServiceInstancesRequest.class);
1155 } catch (IOException e) {
1157 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1159 ValidateException validateException = new ValidateException.Builder("Error mapping request: " + e.getMessage(), HttpStatus.SC_BAD_REQUEST, ErrorNumbers.SVC_BAD_PARAMETER).cause(e)
1160 .errorInfo(errorLoggerInfo).build();
1161 String requestScope = requestScopeFromUri(requestUri);
1163 msoRequest.createErrorRequestRecord(Status.FAILED, requestId, validateException.getMessage(), action, requestScope, requestJSON);
1165 throw validateException;
1169 private void parseRequest(ServiceInstancesRequest sir, HashMap<String, String> instanceIdMap, Actions action, String version,
1170 String requestJSON, Boolean aLaCarte, String requestId, InfraActiveRequests currentActiveReq) throws ValidateException, RequestDbFailureException {
1171 int reqVersion = Integer.parseInt(version.substring(1));
1173 msoRequest.parse(sir, instanceIdMap, action, version, requestJSON, reqVersion, aLaCarte);
1174 } catch (Exception e) {
1175 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1176 ValidateException validateException = new ValidateException.Builder("Error parsing request: " + e.getMessage(), HttpStatus.SC_BAD_REQUEST, ErrorNumbers.SVC_BAD_PARAMETER).cause(e)
1177 .errorInfo(errorLoggerInfo).build();
1179 updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1181 throw validateException;
1185 private RecipeLookupResult getServiceInstanceOrchestrationURI(ServiceInstancesRequest sir, Actions action, boolean alaCarteFlag,
1186 InfraActiveRequests currentActiveReq) throws ApiException {
1187 RecipeLookupResult recipeLookupResult = null;
1188 //if the aLaCarte flag is set to TRUE, the API-H should choose the VID_DEFAULT recipe for the requested action
1189 ModelInfo modelInfo = sir.getRequestDetails().getModelInfo();
1190 // Query MSO Catalog DB
1192 if (action == Action.applyUpdatedConfig || action == Action.inPlaceSoftwareUpdate) {
1193 recipeLookupResult = getDefaultVnfUri(sir, action);
1194 }else if(action == Action.addMembers || action == Action.removeMembers){
1195 recipeLookupResult = new RecipeLookupResult("/mso/async/services/WorkflowActionBB", 180);
1196 }else if (modelInfo.getModelType().equals(ModelType.service)) {
1198 recipeLookupResult = getServiceURI(sir, action,alaCarteFlag);
1199 } catch (IOException e) {
1200 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1203 ValidateException validateException = new ValidateException.Builder(e.getMessage(), HttpStatus.SC_BAD_REQUEST, ErrorNumbers.SVC_BAD_PARAMETER).cause(e)
1204 .errorInfo(errorLoggerInfo).build();
1206 updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1208 throw validateException;
1210 } else if (modelInfo.getModelType().equals(ModelType.vfModule) ||
1211 modelInfo.getModelType().equals(ModelType.volumeGroup) || modelInfo.getModelType().equals(ModelType.vnf)) {
1213 recipeLookupResult = getVnfOrVfModuleUri( sir, action);
1214 } catch (ValidationException e) {
1215 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1218 ValidateException validateException = new ValidateException.Builder(e.getMessage(), HttpStatus.SC_BAD_REQUEST, ErrorNumbers.SVC_BAD_PARAMETER).cause(e)
1219 .errorInfo(errorLoggerInfo).build();
1221 updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1223 throw validateException;
1225 }else if (modelInfo.getModelType().equals(ModelType.network)) {
1227 recipeLookupResult = getNetworkUri( sir, action);
1228 } catch (ValidationException e) {
1230 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1233 ValidateException validateException = new ValidateException.Builder(e.getMessage(), HttpStatus.SC_BAD_REQUEST, ErrorNumbers.SVC_BAD_PARAMETER).cause(e)
1234 .errorInfo(errorLoggerInfo).build();
1235 updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1237 throw validateException;
1239 }else if(modelInfo.getModelType().equals(ModelType.instanceGroup)){
1240 recipeLookupResult = new RecipeLookupResult("/mso/async/services/WorkflowActionBB", 180);
1243 if (recipeLookupResult == null) {
1244 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, MsoLogger.ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1247 RecipeNotFoundException recipeNotFoundExceptionException = new RecipeNotFoundException.Builder("Recipe could not be retrieved from catalog DB.", HttpStatus.SC_NOT_FOUND, ErrorNumbers.SVC_GENERAL_SERVICE_ERROR)
1248 .errorInfo(errorLoggerInfo).build();
1250 updateStatus(currentActiveReq, Status.FAILED, recipeNotFoundExceptionException.getMessage());
1251 throw recipeNotFoundExceptionException;
1253 return recipeLookupResult;
1256 private RecipeLookupResult getServiceURI(ServiceInstancesRequest servInstReq, Actions action, boolean alaCarteFlag) throws IOException {
1258 // Construct the default service name
1259 // TODO need to make this a configurable property
1260 String defaultServiceModelName = getDefaultModel(servInstReq);
1261 RequestDetails requestDetails = servInstReq.getRequestDetails();
1262 ModelInfo modelInfo = requestDetails.getModelInfo();
1263 org.onap.so.db.catalog.beans.Service serviceRecord;
1264 List<org.onap.so.db.catalog.beans.Service> serviceRecordList;
1265 ServiceRecipe recipe = null;
1268 serviceRecord = catalogDbClient.getFirstByModelNameOrderByModelVersionDesc(defaultServiceModelName);
1269 if(serviceRecord !=null){
1270 recipe =catalogDbClient.getFirstByServiceModelUUIDAndAction(serviceRecord.getModelUUID(),action.toString());
1273 serviceRecord = catalogDbClient.getServiceByID(modelInfo.getModelVersionId());
1274 recipe = catalogDbClient.getFirstByServiceModelUUIDAndAction(modelInfo.getModelVersionId(), action.toString());
1275 if (recipe == null){
1276 serviceRecordList = catalogDbClient.getServiceByModelInvariantUUIDOrderByModelVersionDesc(modelInfo.getModelInvariantId());
1277 if(!serviceRecordList.isEmpty()){
1278 for(org.onap.so.db.catalog.beans.Service record : serviceRecordList){
1279 recipe = catalogDbClient.getFirstByServiceModelUUIDAndAction(record.getModelUUID(),action.toString());
1288 //if an aLaCarte flag was sent in the request, throw an error if the recipe was not found
1289 RequestParameters reqParam = requestDetails.getRequestParameters();
1290 if(reqParam!=null && alaCarteFlag && recipe==null){
1292 } else if(!alaCarteFlag && recipe != null && Action.createInstance.equals(action)) {
1293 mapToLegacyRequest(requestDetails);
1294 }else if (recipe == null) { //aLaCarte wasn't sent, so we'll try the default
1295 serviceRecord = catalogDbClient.getFirstByModelNameOrderByModelVersionDesc(defaultServiceModelName);
1296 recipe = catalogDbClient.getFirstByServiceModelUUIDAndAction(serviceRecord.getModelUUID(),action.toString());
1298 if(modelInfo.getModelVersionId() == null) {
1299 modelInfo.setModelVersionId(serviceRecord.getModelUUID());
1304 return new RecipeLookupResult (recipe.getOrchestrationUri (), recipe.getRecipeTimeout ());
1307 protected void mapToLegacyRequest(RequestDetails requestDetails) throws IOException {
1308 RequestParameters reqParam;
1309 if (requestDetails.getRequestParameters() == null) {
1310 reqParam = new RequestParameters();
1312 reqParam = requestDetails.getRequestParameters();
1314 if(requestDetails.getCloudConfiguration() == null) {
1315 CloudConfiguration cloudConfig = configureCloudConfig(reqParam);
1316 if(cloudConfig != null) {
1317 requestDetails.setCloudConfiguration(cloudConfig);
1321 List<Map<String, Object>> userParams = configureUserParams(reqParam);
1322 if(!userParams.isEmpty()) {
1323 if (reqParam == null) {
1324 requestDetails.setRequestParameters(new RequestParameters());
1326 requestDetails.getRequestParameters().setUserParams(userParams);
1330 protected CloudConfiguration configureCloudConfig(RequestParameters reqParams) throws IOException {
1332 for(Map<String, Object> params : reqParams.getUserParams()){
1333 if(params.containsKey("service")){
1334 Service service = serviceMapper(params);
1336 Optional<CloudConfiguration> targetConfiguration = addCloudConfig(service.getCloudConfiguration());
1338 if (targetConfiguration.isPresent()) {
1339 return targetConfiguration.get();
1341 for(Networks network : service.getResources().getNetworks()) {
1342 targetConfiguration = addCloudConfig(network.getCloudConfiguration());
1343 if(targetConfiguration.isPresent()) {
1344 return targetConfiguration.get();
1348 for(Vnfs vnf : service.getResources().getVnfs()) {
1349 targetConfiguration = addCloudConfig(vnf.getCloudConfiguration());
1351 if(targetConfiguration.isPresent()) {
1352 return targetConfiguration.get();
1355 for(VfModules vfModule : vnf.getVfModules()) {
1356 targetConfiguration = addCloudConfig(vfModule.getCloudConfiguration());
1358 if(targetConfiguration.isPresent()) {
1359 return targetConfiguration.get();
1370 private Optional<CloudConfiguration> addCloudConfig(CloudConfiguration sourceCloudConfiguration) {
1371 CloudConfiguration targetConfiguration = new CloudConfiguration();
1372 if(sourceCloudConfiguration != null) {
1373 targetConfiguration.setAicNodeClli(sourceCloudConfiguration.getAicNodeClli());
1374 targetConfiguration.setTenantId(sourceCloudConfiguration.getTenantId());
1375 targetConfiguration.setLcpCloudRegionId(sourceCloudConfiguration.getLcpCloudRegionId());
1376 targetConfiguration.setCloudOwner(sourceCloudConfiguration.getCloudOwner());
1377 return Optional.of(targetConfiguration);
1379 return Optional.empty();
1382 protected List<Map<String, Object>> configureUserParams(RequestParameters reqParams) throws IOException {
1383 msoLogger.debug("Configuring UserParams for Macro Request");
1384 Map<String, Object> userParams = new HashMap<>();
1386 for(Map<String, Object> params : reqParams.getUserParams()){
1387 if(params.containsKey("service")){
1388 Service service = serviceMapper(params);
1390 addUserParams(userParams, service.getInstanceParams());
1392 for(Networks network : service.getResources().getNetworks()) {
1393 addUserParams(userParams, network.getInstanceParams());
1396 for(Vnfs vnf: service.getResources().getVnfs()) {
1397 addUserParams(userParams, vnf.getInstanceParams());
1399 for(VfModules vfModule: vnf.getVfModules()) {
1400 addUserParams(userParams, vfModule.getInstanceParams());
1406 return mapFlatMapToNameValue(userParams);
1409 private Service serviceMapper(Map<String, Object> params)
1410 throws JsonProcessingException, IOException, JsonParseException, JsonMappingException {
1411 ObjectMapper obj = new ObjectMapper();
1412 String input = obj.writeValueAsString(params.get("service"));
1413 return obj.readValue(input, Service.class);
1416 private void addUserParams(Map<String, Object> targetUserParams, List<Map<String, String>> sourceUserParams) {
1417 for(Map<String, String> map : sourceUserParams) {
1418 for (Map.Entry<String, String> entry : map.entrySet()) {
1419 targetUserParams.put(entry.getKey(), entry.getValue());
1424 protected List<Map<String, Object>> mapFlatMapToNameValue(Map<String, Object> flatMap) {
1425 List<Map<String, Object>> targetUserParams = new ArrayList<>();
1427 for(Map.Entry<String, Object> map : flatMap.entrySet()) {
1428 Map<String, Object> targetMap = new HashMap<>();
1429 targetMap.put(NAME, map.getKey());
1430 targetMap.put(VALUE, map.getValue());
1431 targetUserParams.add(targetMap);
1433 return targetUserParams;
1436 private RecipeLookupResult getVnfOrVfModuleUri(ServiceInstancesRequest servInstReq, Actions action) throws ValidationException {
1438 ModelInfo modelInfo = servInstReq.getRequestDetails().getModelInfo();
1439 String vnfComponentType = modelInfo.getModelType().name();
1441 RelatedInstanceList[] instanceList = null;
1442 if (servInstReq.getRequestDetails() != null) {
1443 instanceList = servInstReq.getRequestDetails().getRelatedInstanceList();
1446 Recipe recipe = null;
1447 String defaultSource = getDefaultModel(servInstReq);
1448 String modelCustomizationId = modelInfo.getModelCustomizationId();
1449 String modelCustomizationName = modelInfo.getModelCustomizationName();
1450 String relatedInstanceModelVersionId = null;
1451 String relatedInstanceModelInvariantId = null;
1452 String relatedInstanceVersion = null;
1453 String relatedInstanceModelCustomizationName = null;
1455 if (instanceList != null) {
1457 for(RelatedInstanceList relatedInstanceList : instanceList){
1459 RelatedInstance relatedInstance = relatedInstanceList.getRelatedInstance();
1460 ModelInfo relatedInstanceModelInfo = relatedInstance.getModelInfo();
1461 if(relatedInstanceModelInfo.getModelType().equals(ModelType.service)){
1462 relatedInstanceModelVersionId = relatedInstanceModelInfo.getModelVersionId();
1463 relatedInstanceVersion = relatedInstanceModelInfo.getModelVersion();
1466 if(relatedInstanceModelInfo.getModelType().equals(ModelType.vnf)){
1467 relatedInstanceModelVersionId = relatedInstanceModelInfo.getModelVersionId();
1468 relatedInstanceModelInvariantId = relatedInstanceModelInfo.getModelInvariantId();
1469 relatedInstanceVersion = relatedInstanceModelInfo.getModelVersion();
1470 relatedInstanceModelCustomizationName = relatedInstanceModelInfo.getModelCustomizationName();
1474 if(modelInfo.getModelType().equals(ModelType.vnf)) {
1475 // a. For a vnf request (only create, no update currently):
1476 // i. (v3-v4) If modelInfo.modelCustomizationId is provided, use it to validate catalog DB has record in vnf_resource_customization.model_customization_uuid.
1477 // 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
1478 // been provided (else create request should be rejected). APIH should use the relatedInstance.modelInfo[service].modelVersionId** + modelInfo[vnf].modelCustomizationName
1479 // to “join�? service_to_resource_customizations with vnf_resource_customization to confirm a vnf_resource_customization.model_customization_uuid record exists.
1480 // **If relatedInstance.modelInfo[service].modelVersionId was not provided, use relatedInstance.modelInfo[service].modelInvariantId + modelVersion instead to lookup modelVersionId
1481 // (MODEL_UUID) in SERVICE table.
1482 // 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
1483 // during 1707 data migration if VID did not provide it originally on request.
1484 // iv. Note: continue to construct the “vnf-type�? value and pass to BPMN (must still be populated in A&AI).
1485 // 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.
1487 VnfResource vnfResource = null;
1488 VnfResourceCustomization vrc=null;
1489 // Validation for vnfResource
1491 if(modelCustomizationId!=null) {
1492 vrc = catalogDbClient.getVnfResourceCustomizationByModelCustomizationUUID(modelCustomizationId);
1494 vnfResource = vrc.getVnfResources();
1497 org.onap.so.db.catalog.beans.Service service = catalogDbClient.getServiceByID(relatedInstanceModelVersionId);
1498 if(service == null) {
1499 service = catalogDbClient.getServiceByModelVersionAndModelInvariantUUID(relatedInstanceVersion, relatedInstanceModelInvariantId);
1502 if(service == null) {
1503 throw new ValidationException("service in relatedInstance");
1505 for (VnfResourceCustomization vnfResourceCustom : service.getVnfCustomizations()) {
1506 if (vnfResourceCustom.getModelInstanceName().equals(modelCustomizationName)) {
1507 vrc=vnfResourceCustom;
1512 vnfResource = vrc.getVnfResources();
1513 modelInfo.setModelCustomizationId(vrc.getModelCustomizationUUID());
1514 modelInfo.setModelCustomizationUuid(vrc.getModelCustomizationUUID());
1518 if(vnfResource==null){
1519 throw new ValidationException("vnfResource");
1521 if(modelInfo.getModelVersionId() == null) {
1522 modelInfo.setModelVersionId(vnfResource.getModelUUID());
1526 VnfRecipe vnfRecipe = null;
1529 String nfRole = vrc.getNfRole();
1530 if(nfRole != null) {
1531 vnfRecipe = catalogDbClient.getFirstVnfRecipeByNfRoleAndAction(vrc.getNfRole(), action.toString());
1535 if(vnfRecipe == null) {
1536 vnfRecipe = catalogDbClient.getFirstVnfRecipeByNfRoleAndAction(defaultSource, action.toString());
1539 if (vnfRecipe == null) {
1543 return new RecipeLookupResult (vnfRecipe.getOrchestrationUri(), vnfRecipe.getRecipeTimeout());
1545 /* (v5-v7) If modelInfo.modelCustomizationId is NOT provided (because it is a pre-1702 ASDC model or pre-v3), then modelInfo.modelCustomizationName must have
1546 // been provided (else create request should be rejected). APIH should use the relatedInstance.modelInfo[vnf].modelVersionId + modelInfo[vnf].modelCustomizationName
1547 // to join vnf_to_resource_customizations with vf_resource_customization to confirm a vf_resource_customization.model_customization_uuid record exists.
1548 // 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.
1549 // 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
1550 // confirm record matches request data (and to identify the modelCustomizationId associated with the vfModule in the request). This means taking each record found
1551 // 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)
1552 // and MODEL_VERSION (modelVersion).
1554 VfModuleCustomization vfmc = null;
1556 VnfResourceCustomization vnfrc;
1557 VfModule vfModule = null;
1559 if(modelInfo.getModelCustomizationId() != null) {
1560 vfmc = catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID(modelInfo.getModelCustomizationId());
1562 vnfr = catalogDbClient.getVnfResourceByModelUUID(relatedInstanceModelVersionId);
1564 vnfr = catalogDbClient.getFirstVnfResourceByModelInvariantUUIDAndModelVersion(relatedInstanceModelInvariantId, relatedInstanceVersion);
1566 vnfrc = catalogDbClient.getFirstVnfResourceCustomizationByModelInstanceNameAndVnfResources(relatedInstanceModelCustomizationName, vnfr);
1568 List<VfModuleCustomization> list = vnfrc.getVfModuleCustomizations();
1570 String vfModuleModelUUID = modelInfo.getModelVersionId();
1571 for(VfModuleCustomization vf : list) {
1572 VfModuleCustomization vfmCustom;
1573 if(vfModuleModelUUID != null){
1574 vfmCustom = catalogDbClient.getVfModuleCustomizationByModelCustomizationUUIDAndVfModuleModelUUID(vf.getModelCustomizationUUID(), vfModuleModelUUID);
1575 if(vfmCustom != null){
1576 vfModule = vfmCustom.getVfModule();
1579 vfmCustom = catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID(vf.getModelCustomizationUUID());
1580 if(vfmCustom != null){
1581 vfModule = vfmCustom.getVfModule();
1583 vfModule = catalogDbClient.getVfModuleByModelInvariantUUIDAndModelVersion(relatedInstanceModelInvariantId, relatedInstanceVersion);
1587 if(vfModule != null) {
1588 modelInfo.setModelCustomizationId(vf.getModelCustomizationUUID());
1589 modelInfo.setModelCustomizationUuid(vf.getModelCustomizationUUID());
1595 if(vfmc == null && vfModule == null) {
1596 throw new ValidationException("vfModuleCustomization");
1597 } else if (vfModule == null && vfmc != null) {
1598 vfModule = vfmc.getVfModule(); // can't be null as vfModuleModelUUID is not-null property in VfModuleCustomization table
1601 if(modelInfo.getModelVersionId() == null) {
1602 modelInfo.setModelVersionId(vfModule.getModelUUID());
1606 recipe = catalogDbClient.getFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction(vfModule.getModelUUID(), vnfComponentType, action.toString());
1608 List<VfModule> vfModuleRecords= catalogDbClient.getVfModuleByModelInvariantUUIDOrderByModelVersionDesc(vfModule.getModelInvariantUUID());
1609 if(!vfModuleRecords.isEmpty()){
1610 for(VfModule record : vfModuleRecords){
1611 recipe = catalogDbClient.getFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction(record.getModelUUID(), vnfComponentType, action.toString());
1618 if(recipe == null) {
1619 recipe = catalogDbClient.getFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction(defaultSource, vnfComponentType, action.toString());
1620 if (recipe == null) {
1621 recipe = catalogDbClient.getFirstVnfComponentsRecipeByVnfComponentTypeAndAction(vnfComponentType, action.toString());
1624 if(recipe == null) {
1631 if(modelInfo.getModelType().equals(ModelType.vnf)) {
1632 recipe = catalogDbClient.getFirstVnfRecipeByNfRoleAndAction(defaultSource, action.toString());
1633 if (recipe == null) {
1637 recipe = catalogDbClient.getFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction(defaultSource, vnfComponentType, action.toString());
1639 if (recipe == null) {
1645 return new RecipeLookupResult (recipe.getOrchestrationUri (), recipe.getRecipeTimeout ());
1648 private RecipeLookupResult getDefaultVnfUri(ServiceInstancesRequest sir, Actions action) {
1650 String defaultSource = getDefaultModel(sir);
1652 VnfRecipe vnfRecipe = catalogDbClient.getFirstVnfRecipeByNfRoleAndAction(defaultSource, action.toString());
1654 if (vnfRecipe == null) {
1658 return new RecipeLookupResult (vnfRecipe.getOrchestrationUri(), vnfRecipe.getRecipeTimeout());
1662 private RecipeLookupResult getNetworkUri(ServiceInstancesRequest sir, Actions action) throws ValidationException {
1664 String defaultNetworkType = getDefaultModel(sir);
1666 ModelInfo modelInfo = sir.getRequestDetails().getModelInfo();
1667 String modelName = modelInfo.getModelName();
1668 Recipe recipe = null;
1670 if(modelInfo.getModelCustomizationId()!=null){
1671 NetworkResource networkResource = catalogDbClient.getNetworkResourceCustomizationByModelCustomizationUUID(modelInfo.getModelCustomizationId()).getNetworkResource();
1672 if(networkResource!=null){
1673 if(modelInfo.getModelVersionId() == null) {
1674 modelInfo.setModelVersionId(networkResource.getModelUUID());
1676 recipe = catalogDbClient.getFirstNetworkRecipeByModelNameAndAction(networkResource.getModelName(), action.toString());
1678 throw new ValidationException("no catalog entry found");
1681 //ok for version < 3 and action delete
1682 if(modelName != null){
1683 recipe = catalogDbClient.getFirstNetworkRecipeByModelNameAndAction(modelName, action.toString());
1688 recipe = catalogDbClient.getFirstNetworkRecipeByModelNameAndAction(defaultNetworkType, action.toString());
1691 return recipe !=null ? new RecipeLookupResult(recipe.getOrchestrationUri(), recipe.getRecipeTimeout()) : null;
1694 private Optional<String> retrieveModelName(RequestParameters requestParams) {
1695 String requestTestApi = null;
1696 TestApi testApi = null;
1698 if (requestParams != null) {
1699 requestTestApi = requestParams.getTestApi();
1702 if (requestTestApi == null) {
1703 if(requestParams != null && requestParams.getALaCarte() != null && !requestParams.getALaCarte()) {
1704 requestTestApi = env.getProperty(CommonConstants.MACRO_TEST_API);
1706 requestTestApi = env.getProperty(CommonConstants.ALACARTE_TEST_API);
1711 testApi = TestApi.valueOf(requestTestApi);
1712 return Optional.of(testApi.getModelName());
1713 } catch (Exception e) {
1714 msoLogger.warnSimple("Catching the exception on the valueOf enum call and continuing", e);
1715 throw new IllegalArgumentException("Invalid TestApi is provided", e);
1719 private String getDefaultModel(ServiceInstancesRequest sir) {
1720 String defaultModel = sir.getRequestDetails().getRequestInfo().getSource() + "_DEFAULT";
1721 Optional<String> oModelName = retrieveModelName(sir.getRequestDetails().getRequestParameters());
1722 if (oModelName.isPresent()) {
1723 defaultModel = oModelName.get();
1725 return defaultModel;
1728 private Response configurationRecipeLookup(String requestJSON, Action action, HashMap<String, String> instanceIdMap, String version, String requestId, String requestUri) throws ApiException {
1729 String serviceInstanceId = (instanceIdMap ==null)? null:instanceIdMap.get("serviceInstanceId");
1730 Boolean aLaCarte = null;
1731 String apiVersion = version.substring(1);
1733 long startTime = System.currentTimeMillis ();
1734 ServiceInstancesRequest sir = null;
1736 sir = convertJsonToServiceInstanceRequest(requestJSON, action, startTime, sir, msoRequest, requestId, requestUri);
1737 String requestScope = deriveRequestScope(action,sir, requestUri);
1738 InfraActiveRequests currentActiveReq = msoRequest.createRequestObject ( sir, action, requestId, Status.IN_PROGRESS, requestJSON, requestScope);
1739 if(sir.getRequestDetails().getRequestParameters() != null){
1740 aLaCarte = sir.getRequestDetails().getRequestParameters().getALaCarte();
1742 parseRequest(sir, instanceIdMap, action, version, requestJSON, aLaCarte, requestId, currentActiveReq);
1743 setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
1744 String instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();
1746 InfraActiveRequests dup = null;
1748 dup = duplicateCheck(action, instanceIdMap, startTime, msoRequest, instanceName,requestScope, currentActiveReq);
1750 if (instanceIdMap != null && dup != null) {
1751 buildErrorOnDuplicateRecord(currentActiveReq, action, instanceIdMap, startTime, msoRequest, instanceName, requestScope, dup);
1754 ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
1755 RequestReferences referencesResponse = new RequestReferences();
1756 referencesResponse.setRequestId(requestId);
1757 serviceResponse.setRequestReferences(referencesResponse);
1760 String orchestrationUri = env.getProperty(CommonConstants.ALACARTE_ORCHESTRATION);
1761 String timeOut = env.getProperty(CommonConstants.ALACARTE_RECIPE_TIMEOUT);
1763 if (StringUtils.isBlank(orchestrationUri) || StringUtils.isBlank(timeOut)) {
1764 String error = StringUtils.isBlank(orchestrationUri) ? "ALaCarte Orchestration URI not found in properties" : "ALaCarte Recipe Timeout not found in properties";
1766 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, MsoLogger.ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1769 ValidateException validateException = new ValidateException.Builder(error, HttpStatus.SC_NOT_FOUND, ErrorNumbers.SVC_GENERAL_SERVICE_ERROR)
1770 .errorInfo(errorLoggerInfo).build();
1772 updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1774 throw validateException;
1778 serviceInstanceId = "";
1779 String configurationId = "";
1780 String correlationId = "";
1782 if(sir.getServiceInstanceId () != null){
1783 serviceInstanceId = sir.getServiceInstanceId ();
1786 if(sir.getConfigurationId() != null){
1787 configurationId = sir.getConfigurationId();
1790 correlationId = getCorrelationId(sir);
1793 infraActiveRequestsClient.save(currentActiveReq);
1794 }catch(Exception e){
1795 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, MsoLogger.ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1796 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e)
1797 .errorInfo(errorLoggerInfo).build();
1800 if(!requestScope.equalsIgnoreCase(ModelType.service.name())){
1802 }else if(aLaCarte == null){
1805 RequestClientParameter requestClientParameter = null;
1807 requestClientParameter = new RequestClientParameter.Builder()
1808 .setRequestId(requestId)
1809 .setBaseVfModule(false)
1810 .setRecipeTimeout(Integer.parseInt(timeOut))
1811 .setRequestAction(action.toString())
1812 .setServiceInstanceId(serviceInstanceId)
1813 .setCorrelationId(correlationId)
1814 .setConfigurationId(configurationId)
1815 .setRequestDetails(mapJSONtoMSOStyle(requestJSON, sir, aLaCarte, action))
1816 .setApiVersion(apiVersion)
1817 .setALaCarte(aLaCarte)
1818 .setRequestUri(requestUri).build();
1819 } catch (IOException e) {
1820 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1821 throw new ValidateException.Builder("Unable to generate RequestClientParamter object" + e.getMessage(), HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER)
1822 .errorInfo(errorLoggerInfo).build();
1825 return postBPELRequest(currentActiveReq, requestClientParameter, orchestrationUri, requestScope);
1828 public String getRequestId(ContainerRequestContext requestContext) throws ValidateException {
1829 String requestId = null;
1830 if (requestContext.getProperty("requestId") != null) {
1831 requestId = requestContext.getProperty("requestId").toString();
1833 if (UUIDChecker.isValidUUID(requestId)) {
1836 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1837 ValidateException validateException = new ValidateException.Builder("Request Id " + requestId + " is not a valid UUID", HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER)
1838 .errorInfo(errorLoggerInfo).build();
1840 throw validateException;
1843 public void updateStatus(InfraActiveRequests aq, Status status, String errorMessage) throws RequestDbFailureException{
1844 if ((status == Status.FAILED) || (status == Status.COMPLETE)) {
1845 aq.setStatusMessage (errorMessage);
1846 aq.setProgress(new Long(100));
1847 aq.setRequestStatus(status.toString());
1848 Timestamp endTimeStamp = new Timestamp (System.currentTimeMillis());
1849 aq.setEndTime (endTimeStamp);
1851 infraActiveRequestsClient.save(aq);
1852 }catch(Exception e){
1853 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, MsoLogger.ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1854 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e)
1855 .errorInfo(errorLoggerInfo).build();
1859 protected String getServiceType(String requestScope, ServiceInstancesRequest sir, Boolean aLaCarteFlag){
1860 String serviceType = null;
1861 if(requestScope.equalsIgnoreCase(ModelType.service.toString())){
1862 String defaultServiceModelName = getDefaultModel(sir);
1863 org.onap.so.db.catalog.beans.Service serviceRecord;
1865 serviceRecord = catalogDbClient.getFirstByModelNameOrderByModelVersionDesc(defaultServiceModelName);
1866 if(serviceRecord != null){
1867 serviceType = serviceRecord.getServiceType();
1870 serviceRecord = catalogDbClient.getServiceByID(sir.getRequestDetails().getModelInfo().getModelVersionId());
1871 if(serviceRecord != null){
1872 serviceType = serviceRecord.getServiceType();
1874 serviceRecord = catalogDbClient.getFirstByModelNameOrderByModelVersionDesc(defaultServiceModelName);
1875 if(serviceRecord != null){
1876 serviceType = serviceRecord.getServiceType();
1881 serviceType = msoRequest.getServiceInstanceType(sir, requestScope);