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.LogConstants;
66 import org.onap.so.logger.MessageEnum;
67 import org.onap.so.logger.MsoLogger;
68 import org.onap.so.serviceinstancebeans.CloudConfiguration;
69 import org.onap.so.serviceinstancebeans.ModelInfo;
70 import org.onap.so.serviceinstancebeans.ModelType;
71 import org.onap.so.serviceinstancebeans.Networks;
72 import org.onap.so.serviceinstancebeans.RelatedInstance;
73 import org.onap.so.serviceinstancebeans.RelatedInstanceList;
74 import org.onap.so.serviceinstancebeans.RequestDetails;
75 import org.onap.so.serviceinstancebeans.RequestParameters;
76 import org.onap.so.serviceinstancebeans.RequestReferences;
77 import org.onap.so.serviceinstancebeans.Service;
78 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
79 import org.onap.so.serviceinstancebeans.ServiceInstancesResponse;
80 import org.onap.so.serviceinstancebeans.VfModules;
81 import org.onap.so.serviceinstancebeans.Vnfs;
82 import org.onap.so.utils.UUIDChecker;
84 import org.springframework.beans.factory.annotation.Autowired;
85 import org.springframework.core.env.Environment;
86 import org.springframework.stereotype.Component;
88 import javax.transaction.Transactional;
89 import javax.ws.rs.Consumes;
90 import javax.ws.rs.DELETE;
91 import javax.ws.rs.POST;
92 import javax.ws.rs.PUT;
93 import javax.ws.rs.Path;
94 import javax.ws.rs.PathParam;
95 import javax.ws.rs.Produces;
96 import javax.ws.rs.container.ContainerRequestContext;
97 import javax.ws.rs.core.Context;
98 import javax.ws.rs.core.MediaType;
99 import javax.ws.rs.core.MultivaluedMap;
100 import javax.ws.rs.core.Response;
101 import java.io.IOException;
103 import java.sql.Timestamp;
104 import java.util.ArrayList;
105 import java.util.HashMap;
106 import java.util.List;
107 import java.util.Map;
108 import java.util.Optional;
111 @Path("/onap/so/infra/serviceInstantiation")
112 @Api(value="/onap/so/infra/serviceInstantiation",description="Infrastructure API Requests for Service Instances")
113 public class ServiceInstances {
115 private static MsoLogger msoLogger = MsoLogger.getMsoLogger (MsoLogger.Catalog.APIH,MsoRequest.class);
116 private static String NAME = "name";
117 private static String VALUE = "value";
118 private static final String SAVE_TO_DB = "save instance to db";
121 private Environment env;
124 private RequestClientFactory reqClientFactory;
127 private CatalogDbClient catalogDbClient;
130 private RequestsDbClient infraActiveRequestsClient;
133 private ResponseBuilder builder;
136 private MsoRequest msoRequest;
139 @Path("/{version:[vV][5-7]}/serviceInstances")
140 @Consumes(MediaType.APPLICATION_JSON)
141 @Produces(MediaType.APPLICATION_JSON)
142 @ApiOperation(value="Create a Service Instance on a version provided",response=Response.class)
144 public Response createServiceInstance(String request, @PathParam("version") String version, @Context ContainerRequestContext requestContext) throws ApiException {
145 String requestId = getRequestId(requestContext);
146 return serviceInstances(request, Action.createInstance, null, version, requestId, getRequestUri(requestContext));
150 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/activate")
151 @Consumes(MediaType.APPLICATION_JSON)
152 @Produces(MediaType.APPLICATION_JSON)
153 @ApiOperation(value="Activate provided Service Instance",response=Response.class)
155 public Response activateServiceInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
156 String requestId = getRequestId(requestContext);
157 HashMap<String, String> instanceIdMap = new HashMap<>();
158 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
159 return serviceInstances(request, Action.activateInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
163 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/deactivate")
164 @Consumes(MediaType.APPLICATION_JSON)
165 @Produces(MediaType.APPLICATION_JSON)
166 @ApiOperation(value="Deactivate provided Service Instance",response=Response.class)
168 public Response deactivateServiceInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
169 String requestId = getRequestId(requestContext);
170 HashMap<String, String> instanceIdMap = new HashMap<>();
171 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
172 return serviceInstances(request, Action.deactivateInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
176 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}")
177 @Consumes(MediaType.APPLICATION_JSON)
178 @Produces(MediaType.APPLICATION_JSON)
179 @ApiOperation(value="Delete provided Service Instance",response=Response.class)
181 public Response deleteServiceInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
182 String requestId = getRequestId(requestContext);
183 HashMap<String, String> instanceIdMap = new HashMap<>();
184 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
185 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
189 @Path("/{version:[vV][7]}/serviceInstances/assign")
190 @Consumes(MediaType.APPLICATION_JSON)
191 @Produces(MediaType.APPLICATION_JSON)
192 @ApiOperation(value="Assign Service Instance", response=Response.class)
194 public Response assignServiceInstance(String request, @PathParam("version") String version, @Context ContainerRequestContext requestContext) throws ApiException {
195 String requestId = getRequestId(requestContext);
196 return serviceInstances(request, Action.assignInstance, null, version, requestId, getRequestUri(requestContext));
200 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/unassign")
201 @Consumes(MediaType.APPLICATION_JSON)
202 @Produces(MediaType.APPLICATION_JSON)
203 @ApiOperation(value="Unassign Service Instance", response=Response.class)
205 public Response unassignServiceInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
206 String requestId = getRequestId(requestContext);
207 HashMap<String, String> instanceIdMap = new HashMap<String,String>();
208 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
209 return serviceInstances(request, Action.unassignInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
213 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations")
214 @Consumes(MediaType.APPLICATION_JSON)
215 @Produces(MediaType.APPLICATION_JSON)
216 @ApiOperation(value="Create Port Mirroring Configuration",response=Response.class)
218 public Response createPortConfiguration(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
219 String requestId = getRequestId(requestContext);
220 HashMap<String, String> instanceIdMap = new HashMap<>();
221 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
222 return configurationRecipeLookup(request, Action.createInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
226 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}")
227 @Consumes(MediaType.APPLICATION_JSON)
228 @Produces(MediaType.APPLICATION_JSON)
229 @ApiOperation(value="Delete provided Port",response=Response.class)
231 public Response deletePortConfiguration(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
232 @PathParam("configurationInstanceId") String configurationInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
233 String requestId = getRequestId(requestContext);
234 HashMap<String, String> instanceIdMap = new HashMap<>();
235 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
236 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
237 return configurationRecipeLookup(request, Action.deleteInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
241 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/enablePort")
242 @Consumes(MediaType.APPLICATION_JSON)
243 @Produces(MediaType.APPLICATION_JSON)
244 @ApiOperation(value="Enable Port Mirroring",response=Response.class)
246 public Response enablePort(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
247 @PathParam("configurationInstanceId") String configurationInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
248 String requestId = getRequestId(requestContext);
249 HashMap<String, String> instanceIdMap = new HashMap<>();
250 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
251 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
252 return configurationRecipeLookup(request, Action.enablePort, instanceIdMap, version, requestId, getRequestUri(requestContext));
256 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/disablePort")
257 @Consumes(MediaType.APPLICATION_JSON)
258 @Produces(MediaType.APPLICATION_JSON)
259 @ApiOperation(value="Disable Port Mirroring",response=Response.class)
261 public Response disablePort(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
262 @PathParam("configurationInstanceId") String configurationInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
263 String requestId = getRequestId(requestContext);
264 HashMap<String, String> instanceIdMap = new HashMap<>();
265 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
266 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
267 return configurationRecipeLookup(request, Action.disablePort, instanceIdMap, version, requestId, getRequestUri(requestContext));
271 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/activate")
272 @Consumes(MediaType.APPLICATION_JSON)
273 @Produces(MediaType.APPLICATION_JSON)
274 @ApiOperation(value="Activate Port Mirroring",response=Response.class)
276 public Response activatePort(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
277 @PathParam("configurationInstanceId") String configurationInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
278 String requestId = getRequestId(requestContext);
279 HashMap<String, String> instanceIdMap = new HashMap<>();
280 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
281 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
282 return configurationRecipeLookup(request, Action.activateInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
286 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/deactivate")
287 @Consumes(MediaType.APPLICATION_JSON)
288 @Produces(MediaType.APPLICATION_JSON)
289 @ApiOperation(value="Deactivate Port Mirroring",response=Response.class)
291 public Response deactivatePort(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
292 @PathParam("configurationInstanceId") String configurationInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
293 String requestId = getRequestId(requestContext);
294 HashMap<String, String> instanceIdMap = new HashMap<>();
295 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
296 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
297 return configurationRecipeLookup(request, Action.deactivateInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
301 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/addRelationships")
302 @Consumes(MediaType.APPLICATION_JSON)
303 @Produces(MediaType.APPLICATION_JSON)
304 @ApiOperation(value="Add Relationships to a Service Instance",response=Response.class)
306 public Response addRelationships(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
307 String requestId = getRequestId(requestContext);
308 HashMap<String, String> instanceIdMap = new HashMap<>();
309 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
310 return configurationRecipeLookup(request, Action.addRelationships, instanceIdMap, version, requestId, getRequestUri(requestContext));
314 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/removeRelationships")
315 @Consumes(MediaType.APPLICATION_JSON)
316 @Produces(MediaType.APPLICATION_JSON)
317 @ApiOperation(value="Remove Relationships from Service Instance",response=Response.class)
319 public Response removeRelationships(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
320 String requestId = getRequestId(requestContext);
321 HashMap<String, String> instanceIdMap = new HashMap<>();
322 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
323 return configurationRecipeLookup(request, Action.removeRelationships, instanceIdMap, version, requestId, getRequestUri(requestContext));
327 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs")
328 @Consumes(MediaType.APPLICATION_JSON)
329 @Produces(MediaType.APPLICATION_JSON)
330 @ApiOperation(value="Create VNF on a specified version and serviceInstance",response=Response.class)
332 public Response createVnfInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
333 String requestId = getRequestId(requestContext);
334 HashMap<String, String> instanceIdMap = new HashMap<>();
335 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
336 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
340 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/replace")
341 @Consumes(MediaType.APPLICATION_JSON)
342 @Produces(MediaType.APPLICATION_JSON)
343 @ApiOperation(value="Replace provided VNF instance",response=Response.class)
345 public Response replaceVnfInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
346 @PathParam("vnfInstanceId") String vnfInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
347 String requestId = getRequestId(requestContext);
348 HashMap<String, String> instanceIdMap = new HashMap<>();
349 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
350 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
351 return serviceInstances(request, Action.replaceInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
355 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}")
356 @Consumes(MediaType.APPLICATION_JSON)
357 @Produces(MediaType.APPLICATION_JSON)
358 @ApiOperation(value="Update VNF on a specified version, serviceInstance and vnfInstance",response=Response.class)
360 public Response updateVnfInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
361 @PathParam("vnfInstanceId") String vnfInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
362 String requestId = getRequestId(requestContext);
363 HashMap<String, String> instanceIdMap = new HashMap<>();
364 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
365 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
366 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
370 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/applyUpdatedConfig")
371 @Consumes(MediaType.APPLICATION_JSON)
372 @Produces(MediaType.APPLICATION_JSON)
373 @ApiOperation(value="Apply updated configuration",response=Response.class)
374 public Response applyUpdatedConfig(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
375 @PathParam("vnfInstanceId") String vnfInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
376 String requestId = getRequestId(requestContext);
377 HashMap<String, String> instanceIdMap = new HashMap<>();
378 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
379 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
380 return serviceInstances(request, Action.applyUpdatedConfig, instanceIdMap, version, requestId, getRequestUri(requestContext));
384 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/recreate")
385 @Consumes(MediaType.APPLICATION_JSON)
386 @Produces(MediaType.APPLICATION_JSON)
387 @ApiOperation(value="Recreate VNF Instance",response=Response.class)
388 public Response recreateVnfInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
389 @PathParam("vnfInstanceId") String vnfInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
390 String requestId = getRequestId(requestContext);
391 HashMap<String, String> instanceIdMap = new HashMap<>();
392 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
393 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
394 return serviceInstances(request, Action.recreateInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
399 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}")
400 @Consumes(MediaType.APPLICATION_JSON)
401 @Produces(MediaType.APPLICATION_JSON)
402 @ApiOperation(value="Delete provided VNF instance",response=Response.class)
404 public Response deleteVnfInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
405 @PathParam("vnfInstanceId") String vnfInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
406 String requestId = getRequestId(requestContext);
407 HashMap<String, String> instanceIdMap = new HashMap<>();
408 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
409 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
410 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
414 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules")
415 @Consumes(MediaType.APPLICATION_JSON)
416 @Produces(MediaType.APPLICATION_JSON)
417 @ApiOperation(value="Create VfModule on a specified version, serviceInstance and vnfInstance",response=Response.class)
419 public Response createVfModuleInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
420 @PathParam("vnfInstanceId") String vnfInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
421 String requestId = getRequestId(requestContext);
422 HashMap<String, String> instanceIdMap = new HashMap<>();
423 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
424 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
425 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
429 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/replace")
430 @Consumes(MediaType.APPLICATION_JSON)
431 @Produces(MediaType.APPLICATION_JSON)
432 @ApiOperation(value="Create VfModule on a specified version, serviceInstance and vnfInstance",response=Response.class)
434 public Response replaceVfModuleInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
435 @PathParam("vnfInstanceId") String vnfInstanceId,
436 @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
437 String requestId = getRequestId(requestContext);
438 HashMap<String, String> instanceIdMap = new HashMap<>();
439 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
440 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
441 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
442 return serviceInstances(request, Action.replaceInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
446 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}")
447 @Consumes(MediaType.APPLICATION_JSON)
448 @Produces(MediaType.APPLICATION_JSON)
449 @ApiOperation(value="Update VfModule on a specified version, serviceInstance, vnfInstance and vfModule",response=Response.class)
451 public Response updateVfModuleInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
452 @PathParam("vnfInstanceId") String vnfInstanceId,
453 @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
454 String requestId = getRequestId(requestContext);
455 HashMap<String, String> instanceIdMap = new HashMap<>();
456 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
457 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
458 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
459 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
463 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/inPlaceSoftwareUpdate")
464 @Consumes(MediaType.APPLICATION_JSON)
465 @Produces(MediaType.APPLICATION_JSON)
466 @ApiOperation(value="Perform VNF software update",response=Response.class)
468 public Response inPlaceSoftwareUpdate(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
469 @PathParam("vnfInstanceId") String vnfInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
470 String requestId = getRequestId(requestContext);
471 HashMap<String, String> instanceIdMap = new HashMap<>();
472 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
473 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
474 return serviceInstances(request, Action.inPlaceSoftwareUpdate, instanceIdMap, version, requestId, getRequestUri(requestContext));
478 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}")
479 @Consumes(MediaType.APPLICATION_JSON)
480 @Produces(MediaType.APPLICATION_JSON)
481 @ApiOperation(value="Delete provided VfModule instance",response=Response.class)
483 public Response deleteVfModuleInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
484 @PathParam("vnfInstanceId") String vnfInstanceId,
485 @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
486 String requestId = getRequestId(requestContext);
487 HashMap<String, String> instanceIdMap = new HashMap<>();
488 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
489 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
490 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
491 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
495 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/deactivateAndCloudDelete")
496 @Consumes(MediaType.APPLICATION_JSON)
497 @Produces(MediaType.APPLICATION_JSON)
498 @ApiOperation(value="Deactivate and Cloud Delete VfModule instance",response=Response.class)
500 public Response deactivateAndCloudDeleteVfModuleInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
501 @PathParam("vnfInstanceId") String vnfInstanceId, @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
502 String requestId = getRequestId(requestContext);
503 HashMap<String, String> instanceIdMap = new HashMap<>();
504 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
505 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
506 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
507 Response response = serviceInstances(request, Action.deactivateAndCloudDelete, instanceIdMap, version, requestId, getRequestUri(requestContext));
512 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/scaleOut")
513 @Consumes(MediaType.APPLICATION_JSON)
514 @Produces(MediaType.APPLICATION_JSON)
515 @ApiOperation(value="VF Auto Scale Out",response=Response.class)
517 public Response scaleOutVfModule(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
518 @PathParam("vnfInstanceId") String vnfInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
519 String requestId = getRequestId(requestContext);
520 HashMap<String, String> instanceIdMap = new HashMap<>();
521 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
522 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
523 return serviceInstances(request, Action.scaleOut, instanceIdMap, version, requestId, getRequestUri(requestContext));
528 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups")
529 @Consumes(MediaType.APPLICATION_JSON)
530 @Produces(MediaType.APPLICATION_JSON)
531 @ApiOperation(value="Create VolumeGroup on a specified version, serviceInstance, vnfInstance",response=Response.class)
533 public Response createVolumeGroupInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
534 @PathParam("vnfInstanceId") String vnfInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
535 String requestId = getRequestId(requestContext);
536 HashMap<String, String> instanceIdMap = new HashMap<>();
537 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
538 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
539 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
543 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}")
544 @Consumes(MediaType.APPLICATION_JSON)
545 @Produces(MediaType.APPLICATION_JSON)
546 @ApiOperation(value="Update VolumeGroup on a specified version, serviceInstance, vnfInstance and volumeGroup",response=Response.class)
548 public Response updateVolumeGroupInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
549 @PathParam("vnfInstanceId") String vnfInstanceId,
550 @PathParam("volumeGroupInstanceId") String volumeGroupInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
551 String requestId = getRequestId(requestContext);
552 HashMap<String, String> instanceIdMap = new HashMap<>();
553 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
554 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
555 instanceIdMap.put("volumeGroupInstanceId", volumeGroupInstanceId);
556 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
560 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}")
561 @Consumes(MediaType.APPLICATION_JSON)
562 @Produces(MediaType.APPLICATION_JSON)
563 @ApiOperation(value="Delete provided VolumeGroup instance",response=Response.class)
565 public Response deleteVolumeGroupInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
566 @PathParam("vnfInstanceId") String vnfInstanceId,
567 @PathParam("volumeGroupInstanceId") String volumeGroupInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
568 String requestId = getRequestId(requestContext);
569 HashMap<String, String> instanceIdMap = new HashMap<>();
570 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
571 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
572 instanceIdMap.put("volumeGroupInstanceId", volumeGroupInstanceId);
573 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
577 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks")
578 @Consumes(MediaType.APPLICATION_JSON)
579 @Produces(MediaType.APPLICATION_JSON)
580 @ApiOperation(value="Create NetworkInstance on a specified version and serviceInstance ",response=Response.class)
582 public Response createNetworkInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
583 String requestId = getRequestId(requestContext);
584 HashMap<String, String> instanceIdMap = new HashMap<>();
585 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
586 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
590 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks/{networkInstanceId}")
591 @Consumes(MediaType.APPLICATION_JSON)
592 @Produces(MediaType.APPLICATION_JSON)
593 @ApiOperation(value="Update VolumeGroup on a specified version, serviceInstance, networkInstance",response=Response.class)
595 public Response updateNetworkInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
596 @PathParam("networkInstanceId") String networkInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
597 String requestId = getRequestId(requestContext);
598 HashMap<String, String> instanceIdMap = new HashMap<>();
599 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
600 instanceIdMap.put("networkInstanceId", networkInstanceId);
601 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
605 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks/{networkInstanceId}")
606 @Consumes(MediaType.APPLICATION_JSON)
607 @Produces(MediaType.APPLICATION_JSON)
608 @ApiOperation(value="Delete provided Network instance",response=Response.class)
610 public Response deleteNetworkInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
611 @PathParam("networkInstanceId") String networkInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
612 String requestId = getRequestId(requestContext);
613 HashMap<String, String> instanceIdMap = new HashMap<>();
614 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
615 instanceIdMap.put("networkInstanceId", networkInstanceId);
616 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId, getRequestUri(requestContext));
620 @Path("/{version:[vV][7]}/instanceGroups")
621 @Consumes(MediaType.APPLICATION_JSON)
622 @Produces(MediaType.APPLICATION_JSON)
623 @ApiOperation(value="Create instanceGroups",response=Response.class)
625 public Response createInstanceGroups(String request, @PathParam("version") String version, @Context ContainerRequestContext requestContext) throws ApiException {
626 String requestId = getRequestId(requestContext);
627 return serviceInstances(request, Action.createInstance, null, version, requestId, getRequestUri(requestContext));
631 @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}")
632 @Consumes(MediaType.APPLICATION_JSON)
633 @Produces(MediaType.APPLICATION_JSON)
634 @ApiOperation(value="Delete instanceGroup",response=Response.class)
636 public Response deleteInstanceGroups(@PathParam("version") String version, @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext) throws ApiException {
637 String requestId = getRequestId(requestContext);
638 HashMap<String, String> instanceIdMap = new HashMap<>();
639 instanceIdMap.put(CommonConstants.INSTANCE_GROUP_ID, instanceGroupId);
640 return deleteInstanceGroups(Action.deleteInstance, instanceIdMap, version, requestId, getRequestUri(requestContext), requestContext);
644 @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}/addMembers")
645 @Consumes(MediaType.APPLICATION_JSON)
646 @Produces(MediaType.APPLICATION_JSON)
647 @ApiOperation(value="Add instanceGroup members",response=Response.class)
649 public Response addInstanceGroupMembers(String request, @PathParam("version") String version, @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext) throws ApiException {
650 String requestId = getRequestId(requestContext);
651 HashMap<String, String> instanceIdMap = new HashMap<>();
652 instanceIdMap.put(CommonConstants.INSTANCE_GROUP_ID, instanceGroupId);
653 return serviceInstances(request, Action.addMembers, instanceIdMap, version, requestId, getRequestUri(requestContext));
657 @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}/removeMembers")
658 @Consumes(MediaType.APPLICATION_JSON)
659 @Produces(MediaType.APPLICATION_JSON)
660 @ApiOperation(value="Remove instanceGroup members",response=Response.class)
662 public Response removeInstanceGroupMembers(String request, @PathParam("version") String version, @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext) throws ApiException {
663 String requestId = getRequestId(requestContext);
664 HashMap<String, String> instanceIdMap = new HashMap<>();
665 instanceIdMap.put(CommonConstants.INSTANCE_GROUP_ID, instanceGroupId);
666 return serviceInstances(request, Action.removeMembers, instanceIdMap, version, requestId, getRequestUri(requestContext));
669 public String getRequestUri(ContainerRequestContext context){
670 String requestUri = context.getUriInfo().getPath();
671 String httpUrl = MDC.get(LogConstants.URI_BASE).concat(requestUri);
672 MDC.put(LogConstants.HTTP_URL, httpUrl);
673 requestUri = requestUri.substring(requestUri.indexOf("/serviceInstantiation/") + 22);
677 public void validateHeaders(ContainerRequestContext context) throws ValidationException{
678 MultivaluedMap<String, String> headers = context.getHeaders();
679 if(!headers.containsKey(ONAPLogConstants.Headers.REQUEST_ID)){
680 throw new ValidationException(ONAPLogConstants.Headers.REQUEST_ID + " header", true);
682 if(!headers.containsKey(ONAPLogConstants.Headers.PARTNER_NAME)){
683 throw new ValidationException(ONAPLogConstants.Headers.PARTNER_NAME + " header", true);
685 if(!headers.containsKey(MsoLogger.REQUESTOR_ID)){
686 throw new ValidationException(MsoLogger.REQUESTOR_ID + " header", true);
690 public Response serviceInstances(String requestJSON, Actions action, HashMap<String, String> instanceIdMap, String version, String requestId, String requestUri) throws ApiException {
691 String serviceInstanceId = (instanceIdMap ==null)? null:instanceIdMap.get("serviceInstanceId");
692 Boolean aLaCarte = null;
693 long startTime = System.currentTimeMillis ();
694 ServiceInstancesRequest sir = null;
695 String apiVersion = version.substring(1);
697 sir = convertJsonToServiceInstanceRequest(requestJSON, action, startTime, sir, msoRequest, requestId, requestUri);
698 String requestScope = deriveRequestScope(action, sir, requestUri);
699 InfraActiveRequests currentActiveReq = msoRequest.createRequestObject (sir, action, requestId, Status.IN_PROGRESS, requestJSON, requestScope);
700 if(sir.getRequestDetails().getRequestParameters() != null){
701 aLaCarte = sir.getRequestDetails().getRequestParameters().getALaCarte();
703 parseRequest(sir, instanceIdMap, action, version, requestJSON, aLaCarte, requestId, currentActiveReq);
704 setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
706 int requestVersion = Integer.parseInt(version.substring(1));
707 String instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();
708 boolean alaCarteFlag = msoRequest.getAlacarteFlag(sir);
709 String vnfType = msoRequest.getVnfType(sir,requestScope,action,requestVersion);
710 String networkType = msoRequest.getNetworkType(sir,requestScope);
711 String sdcServiceModelVersion = msoRequest.getSDCServiceModelVersion(sir);
712 String vfModuleType = msoRequest.getVfModuleType(sir,requestScope,action,requestVersion);
714 if(requestScope.equalsIgnoreCase(ModelType.vnf.name()) && vnfType != null){
715 currentActiveReq.setVnfType(vnfType);
716 }else if(requestScope.equalsIgnoreCase(ModelType.network.name()) && networkType != null){
717 currentActiveReq.setNetworkType(networkType);
720 InfraActiveRequests dup = null;
723 dup = duplicateCheck(action, instanceIdMap, startTime, msoRequest, instanceName,requestScope, currentActiveReq);
726 buildErrorOnDuplicateRecord(currentActiveReq, action, instanceIdMap, startTime, msoRequest, instanceName, requestScope, dup);
728 ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
730 RequestReferences referencesResponse = new RequestReferences();
732 referencesResponse.setRequestId(requestId);
734 serviceResponse.setRequestReferences(referencesResponse);
735 Boolean isBaseVfModule = false;
737 RecipeLookupResult recipeLookupResult = getServiceInstanceOrchestrationURI(sir, action, alaCarteFlag, currentActiveReq);
738 String serviceInstanceType = getServiceType(requestScope, sir, alaCarteFlag);
740 ModelInfo modelInfo = sir.getRequestDetails().getModelInfo();
741 if (action == Action.applyUpdatedConfig || action == Action.inPlaceSoftwareUpdate) {
742 modelType = ModelType.vnf;
743 }else if(action == Action.addMembers || action == Action.removeMembers){
744 modelType = ModelType.instanceGroup;
746 modelType =modelInfo.getModelType();
749 if (modelType.equals(ModelType.vfModule)) {
752 // Get VF Module-specific base module indicator
755 String modelVersionId = modelInfo.getModelVersionId();
757 if(modelVersionId != null) {
758 vfm = catalogDbClient.getVfModuleByModelUUID(modelVersionId);
759 } else if(modelInfo.getModelInvariantId() != null && modelInfo.getModelVersion() != null){
760 vfm = catalogDbClient.getVfModuleByModelInvariantUUIDAndModelVersion(modelInfo.getModelInvariantId(), modelInfo.getModelVersion());
764 if (vfm.getIsBase()) {
765 isBaseVfModule = true;
767 } else if (action == Action.createInstance || action == Action.updateInstance) {
768 // There is no entry for this vfModuleType with this version, if specified, in VF_MODULE table in Catalog DB.
769 // This request cannot proceed
771 String serviceVersionText = "";
772 if (sdcServiceModelVersion != null && !sdcServiceModelVersion.isEmpty ()) {
773 serviceVersionText = " with version " + sdcServiceModelVersion;
776 String errorMessage = "VnfType " + vnfType + " and VF Module Model Name " + modelInfo.getModelName() + serviceVersionText + " not found in MSO Catalog DB";
777 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, MsoLogger.ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
778 VfModuleNotFoundException vfModuleException = new VfModuleNotFoundException.Builder(errorMessage, HttpStatus.SC_NOT_FOUND, ErrorNumbers.SVC_BAD_PARAMETER).errorInfo(errorLoggerInfo).build();
779 updateStatus(currentActiveReq, Status.FAILED, vfModuleException.getMessage());
781 throw vfModuleException;
786 serviceInstanceId = "";
788 String vfModuleId = "";
789 String volumeGroupId = "";
790 String networkId = "";
791 String correlationId = "";
792 String instanceGroupId = null;
793 if(sir.getServiceInstanceId () != null){
794 serviceInstanceId = sir.getServiceInstanceId ();
797 if(sir.getVnfInstanceId () != null){
798 vnfId = sir.getVnfInstanceId ();
801 if(sir.getVfModuleInstanceId () != null){
802 vfModuleId = sir.getVfModuleInstanceId ();
805 if(sir.getVolumeGroupInstanceId () != null){
806 volumeGroupId = sir.getVolumeGroupInstanceId ();
809 if(sir.getNetworkInstanceId () != null){
810 networkId = sir.getNetworkInstanceId ();
812 if(sir.getInstanceGroupId() != null){
813 instanceGroupId = sir.getInstanceGroupId();
816 correlationId = getCorrelationId(sir);
819 infraActiveRequestsClient.save(currentActiveReq);
821 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, MsoLogger.ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
822 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e)
823 .errorInfo(errorLoggerInfo).build();
826 if(!requestScope.equalsIgnoreCase(ModelType.service.name()) && action != Action.recreateInstance){
828 }else if(aLaCarte == null){
832 RequestClientParameter requestClientParameter = null;
834 requestClientParameter = new RequestClientParameter.Builder()
835 .setRequestId(requestId)
836 .setBaseVfModule(isBaseVfModule)
837 .setRecipeTimeout(recipeLookupResult.getRecipeTimeout())
838 .setRequestAction(action.toString())
839 .setServiceInstanceId(serviceInstanceId)
840 .setCorrelationId(correlationId)
842 .setVfModuleId(vfModuleId)
843 .setVolumeGroupId(volumeGroupId)
844 .setNetworkId(networkId)
845 .setServiceType(serviceInstanceType)
847 .setVfModuleType(vfModuleType)
848 .setNetworkType(networkType)
849 .setRequestDetails(mapJSONtoMSOStyle(requestJSON, sir, aLaCarte, action))
850 .setApiVersion(apiVersion)
851 .setALaCarte(aLaCarte)
852 .setRequestUri(requestUri)
853 .setInstanceGroupId(instanceGroupId).build();
854 } catch (IOException e) {
855 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
856 throw new ValidateException.Builder("Unable to generate RequestClientParamter object" + e.getMessage(), HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER)
857 .errorInfo(errorLoggerInfo).build();
859 return postBPELRequest(currentActiveReq, requestClientParameter, recipeLookupResult.getOrchestrationURI(), requestScope);
861 public Response deleteInstanceGroups(Actions action, HashMap<String, String> instanceIdMap, String version, String requestId, String requestUri, ContainerRequestContext requestContext) throws ApiException {
862 String instanceGroupId = instanceIdMap.get(CommonConstants.INSTANCE_GROUP_ID);
863 Boolean aLaCarte = true;
864 long startTime = System.currentTimeMillis ();
865 String apiVersion = version.substring(1);
866 ServiceInstancesRequest sir = new ServiceInstancesRequest();
867 sir.setInstanceGroupId(instanceGroupId);
869 String requestScope = ModelType.instanceGroup.toString();
870 InfraActiveRequests currentActiveReq = msoRequest.createRequestObject (sir, action, requestId, Status.IN_PROGRESS, null, requestScope);
871 setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
873 validateHeaders(requestContext);
874 } catch (ValidationException e) {
876 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_VALIDATION_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
877 ValidateException validateException = new ValidateException.Builder(e.getMessage(), HttpStatus.SC_BAD_REQUEST, ErrorNumbers.SVC_BAD_PARAMETER).cause(e)
878 .errorInfo(errorLoggerInfo).build();
879 updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
880 throw validateException;
883 InfraActiveRequests dup = duplicateCheck(action, instanceIdMap, startTime, msoRequest, null, requestScope, currentActiveReq);
886 buildErrorOnDuplicateRecord(currentActiveReq, action, instanceIdMap, startTime, msoRequest, null, requestScope, dup);
889 ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
891 RequestReferences referencesResponse = new RequestReferences();
893 referencesResponse.setRequestId(requestId);
895 serviceResponse.setRequestReferences(referencesResponse);
896 Boolean isBaseVfModule = false;
898 RecipeLookupResult recipeLookupResult = new RecipeLookupResult("/mso/async/services/WorkflowActionBB", 180);
901 infraActiveRequestsClient.save(currentActiveReq);
903 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, MsoLogger.ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
904 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e)
905 .errorInfo(errorLoggerInfo).build();
908 RequestClientParameter requestClientParameter = new RequestClientParameter.Builder()
909 .setRequestId(requestId)
910 .setBaseVfModule(isBaseVfModule)
911 .setRecipeTimeout(recipeLookupResult.getRecipeTimeout())
912 .setRequestAction(action.toString())
913 .setApiVersion(apiVersion)
914 .setALaCarte(aLaCarte)
915 .setRequestUri(requestUri)
916 .setInstanceGroupId(instanceGroupId).build();
918 return postBPELRequest(currentActiveReq, requestClientParameter, recipeLookupResult.getOrchestrationURI(), requestScope);
921 private String getCorrelationId(ServiceInstancesRequest sir) {
922 return Optional.of(sir)
923 .map(ServiceInstancesRequest::getRequestDetails)
924 .map(RequestDetails::getRequestParameters)
925 .map(parameters -> parameters.getUserParamValue("pnfId"))
929 private String deriveRequestScope(Actions action, ServiceInstancesRequest sir, String requestUri) {
930 if(action == Action.inPlaceSoftwareUpdate || action == Action.applyUpdatedConfig){
931 return (ModelType.vnf.name());
932 }else if(action == Action.addMembers || action == Action.removeMembers){
933 return(ModelType.instanceGroup.toString());
936 if(sir.getRequestDetails().getModelInfo().getModelType() == null){
937 requestScope = requestScopeFromUri(requestUri);
939 requestScope = sir.getRequestDetails().getModelInfo().getModelType().name();
944 private String requestScopeFromUri(String requestUri){
946 if(requestUri.contains(ModelType.network.name())){
947 requestScope = ModelType.network.name();
948 }else if(requestUri.contains(ModelType.vfModule.name())){
949 requestScope = ModelType.vfModule.name();
950 }else if(requestUri.contains(ModelType.volumeGroup.name())){
951 requestScope = ModelType.volumeGroup.name();
952 }else if(requestUri.contains(ModelType.configuration.name())){
953 requestScope = ModelType.configuration.name();
954 }else if(requestUri.contains(ModelType.vnf.name())){
955 requestScope = ModelType.vnf.name();
957 requestScope = ModelType.service.name();
961 private Response postBPELRequest(InfraActiveRequests currentActiveReq, RequestClientParameter requestClientParameter, String orchestrationUri, String requestScope)throws ApiException {
962 RequestClient requestClient = null;
963 HttpResponse response = null;
965 requestClient = reqClientFactory.getRequestClient (orchestrationUri);
966 response = requestClient.post(requestClientParameter);
967 } catch (Exception e) {
969 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MsoLogger.ErrorCode.AvailabilityError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
970 String url = requestClient != null ? requestClient.getUrl() : "";
971 ClientConnectionException clientException = new ClientConnectionException.Builder(url, HttpStatus.SC_BAD_GATEWAY, ErrorNumbers.SVC_NO_SERVER_RESOURCES).cause(e).errorInfo(errorLoggerInfo).build();
972 updateStatus(currentActiveReq, Status.FAILED, clientException.getMessage());
974 throw clientException;
977 if (response == null) {
979 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MsoLogger.ErrorCode.BusinessProcesssError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
980 ClientConnectionException clientException = new ClientConnectionException.Builder(requestClient.getUrl(), HttpStatus.SC_BAD_GATEWAY, ErrorNumbers.SVC_NO_SERVER_RESOURCES).errorInfo(errorLoggerInfo).build();
982 updateStatus(currentActiveReq, Status.FAILED, clientException.getMessage());
984 throw clientException;
987 ResponseHandler respHandler = null;
988 int bpelStatus = 500;
990 respHandler = new ResponseHandler (response, requestClient.getType ());
991 bpelStatus = respHandler.getStatus ();
992 } catch (ApiException e) {
994 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
995 ValidateException validateException = new ValidateException.Builder("Exception caught mapping Camunda JSON response to object", HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER).cause(e)
996 .errorInfo(errorLoggerInfo).build();
997 updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
998 throw validateException;
1001 // BPEL accepted the request, the request is in progress
1002 if (bpelStatus == HttpStatus.SC_ACCEPTED) {
1003 ServiceInstancesResponse jsonResponse;
1004 CamundaResponse camundaResp = respHandler.getResponse();
1006 if("Success".equalsIgnoreCase(camundaResp.getMessage())) {
1008 ObjectMapper mapper = new ObjectMapper();
1009 jsonResponse = mapper.readValue(camundaResp.getResponse(), ServiceInstancesResponse.class);
1010 jsonResponse.getRequestReferences().setRequestId(requestClientParameter.getRequestId());
1011 Optional<URL> selfLinkUrl = msoRequest.buildSelfLinkUrl(currentActiveReq.getRequestUrl(), requestClientParameter.getRequestId());
1012 if(selfLinkUrl.isPresent()){
1013 jsonResponse.getRequestReferences().setRequestSelfLink(selfLinkUrl.get());
1015 jsonResponse.getRequestReferences().setRequestSelfLink(null);
1017 } catch (IOException e) {
1019 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1020 ValidateException validateException = new ValidateException.Builder("Exception caught mapping Camunda JSON response to object", HttpStatus.SC_NOT_ACCEPTABLE, ErrorNumbers.SVC_BAD_PARAMETER).cause(e)
1021 .errorInfo(errorLoggerInfo).build();
1022 updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1023 throw validateException;
1025 return builder.buildResponse(HttpStatus.SC_ACCEPTED, requestClientParameter.getRequestId(), jsonResponse, requestClientParameter.getApiVersion());
1029 List<String> variables = new ArrayList<>();
1030 variables.add(bpelStatus + "");
1031 String camundaJSONResponseBody = respHandler.getResponseBody ();
1032 if (camundaJSONResponseBody != null && !camundaJSONResponseBody.isEmpty ()) {
1034 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, MsoLogger.ErrorCode.BusinessProcesssError).errorSource(requestClient.getUrl()).build();
1035 BPMNFailureException bpmnException = new BPMNFailureException.Builder(String.valueOf(bpelStatus) + camundaJSONResponseBody, bpelStatus, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR)
1036 .errorInfo(errorLoggerInfo).build();
1038 updateStatus(currentActiveReq, Status.FAILED, bpmnException.getMessage());
1040 throw bpmnException;
1043 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, MsoLogger.ErrorCode.BusinessProcesssError).errorSource(requestClient.getUrl()).build();
1046 BPMNFailureException servException = new BPMNFailureException.Builder(String.valueOf(bpelStatus), bpelStatus, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR)
1047 .errorInfo(errorLoggerInfo).build();
1048 updateStatus(currentActiveReq, Status.FAILED, servException.getMessage());
1050 throw servException;
1054 private void setInstanceId(InfraActiveRequests currentActiveReq, String requestScope, String instanceId, Map<String, String> instanceIdMap) {
1055 if(StringUtils.isNotBlank(instanceId)) {
1056 if(ModelType.service.name().equalsIgnoreCase(requestScope)) {
1057 currentActiveReq.setServiceInstanceId(instanceId);
1058 } else if(ModelType.vnf.name().equalsIgnoreCase(requestScope)) {
1059 currentActiveReq.setVnfId(instanceId);
1060 } else if(ModelType.vfModule.name().equalsIgnoreCase(requestScope)) {
1061 currentActiveReq.setVfModuleId(instanceId);
1062 } else if(ModelType.volumeGroup.name().equalsIgnoreCase(requestScope)) {
1063 currentActiveReq.setVolumeGroupId(instanceId);
1064 } else if(ModelType.network.name().equalsIgnoreCase(requestScope)) {
1065 currentActiveReq.setNetworkId(instanceId);
1066 } else if(ModelType.configuration.name().equalsIgnoreCase(requestScope)) {
1067 currentActiveReq.setConfigurationId(instanceId);
1068 }else if(ModelType.instanceGroup.toString().equalsIgnoreCase(requestScope)){
1069 currentActiveReq.setInstanceGroupId(instanceId);
1071 } else if(instanceIdMap != null && !instanceIdMap.isEmpty()) {
1072 if(instanceIdMap.get("serviceInstanceId") != null){
1073 currentActiveReq.setServiceInstanceId(instanceIdMap.get("serviceInstanceId"));
1075 if(instanceIdMap.get("vnfInstanceId") != null){
1076 currentActiveReq.setVnfId(instanceIdMap.get("vnfInstanceId"));
1078 if(instanceIdMap.get("vfModuleInstanceId") != null){
1079 currentActiveReq.setVfModuleId(instanceIdMap.get("vfModuleInstanceId"));
1081 if(instanceIdMap.get("volumeGroupInstanceId") != null){
1082 currentActiveReq.setVolumeGroupId(instanceIdMap.get("volumeGroupInstanceId"));
1084 if(instanceIdMap.get("networkInstanceId") != null){
1085 currentActiveReq.setNetworkId(instanceIdMap.get("networkInstanceId"));
1087 if(instanceIdMap.get("configurationInstanceId") != null){
1088 currentActiveReq.setConfigurationId(instanceIdMap.get("configurationInstanceId"));
1090 if(instanceIdMap.get("InstanceGroupInstanceId") != null){
1091 currentActiveReq.setInstanceGroupId(instanceIdMap.get("InstanceGroupInstanceId"));
1096 protected String mapJSONtoMSOStyle(String msoRawRequest, ServiceInstancesRequest serviceInstRequest, boolean isAlaCarte, Actions action) throws IOException {
1097 ObjectMapper mapper = new ObjectMapper();
1098 mapper.setSerializationInclusion(Include.NON_NULL);
1099 if(msoRawRequest != null){
1100 ServiceInstancesRequest sir = mapper.readValue(msoRawRequest, ServiceInstancesRequest.class);
1101 if( !isAlaCarte && Action.createInstance.equals(action) && serviceInstRequest != null &&
1102 serviceInstRequest.getRequestDetails() != null &&
1103 serviceInstRequest.getRequestDetails().getRequestParameters() != null) {
1104 sir.getRequestDetails().setCloudConfiguration(serviceInstRequest.getRequestDetails().getCloudConfiguration());
1105 sir.getRequestDetails().getRequestParameters().setUserParams(serviceInstRequest.getRequestDetails().getRequestParameters().getUserParams());
1107 msoLogger.debug("Value as string: " + mapper.writeValueAsString(sir));
1108 return mapper.writeValueAsString(sir);
1113 private void buildErrorOnDuplicateRecord(InfraActiveRequests currentActiveReq, Actions action, HashMap<String, String> instanceIdMap, long startTime, MsoRequest msoRequest,
1114 String instanceName, String requestScope, InfraActiveRequests dup) throws ApiException {
1116 // Found the duplicate record. Return the appropriate error.
1117 String instance = null;
1118 if(instanceName != null){
1119 instance = instanceName;
1121 instance = instanceIdMap.get(requestScope + "InstanceId");
1123 //List<String> variables = new ArrayList<String>();
1124 //variables.add(dup.getRequestStatus());
1125 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DUPLICATE_FOUND, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1128 DuplicateRequestException dupException = new DuplicateRequestException.Builder(requestScope,instance,dup.getRequestStatus(),dup.getRequestId(), HttpStatus.SC_CONFLICT, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR)
1129 .errorInfo(errorLoggerInfo).build();
1131 updateStatus(currentActiveReq, Status.FAILED, dupException.getMessage());
1136 private InfraActiveRequests duplicateCheck(Actions action, HashMap<String, String> instanceIdMap, long startTime,
1137 MsoRequest msoRequest, String instanceName, String requestScope, InfraActiveRequests currentActiveReq) throws ApiException {
1138 InfraActiveRequests dup = null;
1140 if(!(instanceName==null && requestScope.equals("service") && (action == Action.createInstance || action == Action.activateInstance || action == Action.assignInstance))){
1141 dup = infraActiveRequestsClient.checkInstanceNameDuplicate (instanceIdMap, instanceName, requestScope);
1143 } catch (Exception e) {
1144 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DUPLICATE_CHECK_EXC, MsoLogger.ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1145 RequestDbFailureException requestDbFailureException = new RequestDbFailureException.Builder("check for duplicate instance", e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e)
1146 .errorInfo(errorLoggerInfo).build();
1147 updateStatus(currentActiveReq, Status.FAILED, requestDbFailureException.getMessage());
1148 throw requestDbFailureException;
1153 private ServiceInstancesRequest convertJsonToServiceInstanceRequest(String requestJSON, Actions action, long startTime,
1154 ServiceInstancesRequest sir, MsoRequest msoRequest, String requestId, String requestUri) throws ApiException {
1156 ObjectMapper mapper = new ObjectMapper();
1157 return mapper.readValue(requestJSON, ServiceInstancesRequest.class);
1159 } catch (IOException e) {
1161 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1163 ValidateException validateException = new ValidateException.Builder("Error mapping request: " + e.getMessage(), HttpStatus.SC_BAD_REQUEST, ErrorNumbers.SVC_BAD_PARAMETER).cause(e)
1164 .errorInfo(errorLoggerInfo).build();
1165 String requestScope = requestScopeFromUri(requestUri);
1167 msoRequest.createErrorRequestRecord(Status.FAILED, requestId, validateException.getMessage(), action, requestScope, requestJSON);
1169 throw validateException;
1173 private void parseRequest(ServiceInstancesRequest sir, HashMap<String, String> instanceIdMap, Actions action, String version,
1174 String requestJSON, Boolean aLaCarte, String requestId, InfraActiveRequests currentActiveReq) throws ValidateException, RequestDbFailureException {
1175 int reqVersion = Integer.parseInt(version.substring(1));
1177 msoRequest.parse(sir, instanceIdMap, action, version, requestJSON, reqVersion, aLaCarte);
1178 } catch (Exception e) {
1179 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1180 ValidateException validateException = new ValidateException.Builder("Error parsing request: " + e.getMessage(), HttpStatus.SC_BAD_REQUEST, ErrorNumbers.SVC_BAD_PARAMETER).cause(e)
1181 .errorInfo(errorLoggerInfo).build();
1183 updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1185 throw validateException;
1189 private RecipeLookupResult getServiceInstanceOrchestrationURI(ServiceInstancesRequest sir, Actions action, boolean alaCarteFlag,
1190 InfraActiveRequests currentActiveReq) throws ApiException {
1191 RecipeLookupResult recipeLookupResult = null;
1192 //if the aLaCarte flag is set to TRUE, the API-H should choose the VID_DEFAULT recipe for the requested action
1193 ModelInfo modelInfo = sir.getRequestDetails().getModelInfo();
1194 // Query MSO Catalog DB
1196 if (action == Action.applyUpdatedConfig || action == Action.inPlaceSoftwareUpdate) {
1197 recipeLookupResult = getDefaultVnfUri(sir, action);
1198 }else if(action == Action.addMembers || action == Action.removeMembers){
1199 recipeLookupResult = new RecipeLookupResult("/mso/async/services/WorkflowActionBB", 180);
1200 }else if (modelInfo.getModelType().equals(ModelType.service)) {
1202 recipeLookupResult = getServiceURI(sir, action,alaCarteFlag);
1203 } catch (IOException e) {
1204 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1207 ValidateException validateException = new ValidateException.Builder(e.getMessage(), HttpStatus.SC_BAD_REQUEST, ErrorNumbers.SVC_BAD_PARAMETER).cause(e)
1208 .errorInfo(errorLoggerInfo).build();
1210 updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1212 throw validateException;
1214 } else if (modelInfo.getModelType().equals(ModelType.vfModule) ||
1215 modelInfo.getModelType().equals(ModelType.volumeGroup) || modelInfo.getModelType().equals(ModelType.vnf)) {
1217 recipeLookupResult = getVnfOrVfModuleUri( sir, action);
1218 } catch (ValidationException e) {
1219 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1222 ValidateException validateException = new ValidateException.Builder(e.getMessage(), HttpStatus.SC_BAD_REQUEST, ErrorNumbers.SVC_BAD_PARAMETER).cause(e)
1223 .errorInfo(errorLoggerInfo).build();
1225 updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1227 throw validateException;
1229 }else if (modelInfo.getModelType().equals(ModelType.network)) {
1231 recipeLookupResult = getNetworkUri( sir, action);
1232 } catch (ValidationException e) {
1234 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1237 ValidateException validateException = new ValidateException.Builder(e.getMessage(), HttpStatus.SC_BAD_REQUEST, ErrorNumbers.SVC_BAD_PARAMETER).cause(e)
1238 .errorInfo(errorLoggerInfo).build();
1239 updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1241 throw validateException;
1243 }else if(modelInfo.getModelType().equals(ModelType.instanceGroup)){
1244 recipeLookupResult = new RecipeLookupResult("/mso/async/services/WorkflowActionBB", 180);
1247 if (recipeLookupResult == null) {
1248 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, MsoLogger.ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1251 RecipeNotFoundException recipeNotFoundExceptionException = new RecipeNotFoundException.Builder("Recipe could not be retrieved from catalog DB.", HttpStatus.SC_NOT_FOUND, ErrorNumbers.SVC_GENERAL_SERVICE_ERROR)
1252 .errorInfo(errorLoggerInfo).build();
1254 updateStatus(currentActiveReq, Status.FAILED, recipeNotFoundExceptionException.getMessage());
1255 throw recipeNotFoundExceptionException;
1257 return recipeLookupResult;
1260 private RecipeLookupResult getServiceURI(ServiceInstancesRequest servInstReq, Actions action, boolean alaCarteFlag) throws IOException {
1262 // Construct the default service name
1263 // TODO need to make this a configurable property
1264 String defaultServiceModelName = getDefaultModel(servInstReq);
1265 RequestDetails requestDetails = servInstReq.getRequestDetails();
1266 ModelInfo modelInfo = requestDetails.getModelInfo();
1267 org.onap.so.db.catalog.beans.Service serviceRecord;
1268 List<org.onap.so.db.catalog.beans.Service> serviceRecordList;
1269 ServiceRecipe recipe = null;
1272 serviceRecord = catalogDbClient.getFirstByModelNameOrderByModelVersionDesc(defaultServiceModelName);
1273 if(serviceRecord !=null){
1274 recipe =catalogDbClient.getFirstByServiceModelUUIDAndAction(serviceRecord.getModelUUID(),action.toString());
1277 serviceRecord = catalogDbClient.getServiceByID(modelInfo.getModelVersionId());
1278 recipe = catalogDbClient.getFirstByServiceModelUUIDAndAction(modelInfo.getModelVersionId(), action.toString());
1279 if (recipe == null){
1280 serviceRecordList = catalogDbClient.getServiceByModelInvariantUUIDOrderByModelVersionDesc(modelInfo.getModelInvariantId());
1281 if(!serviceRecordList.isEmpty()){
1282 for(org.onap.so.db.catalog.beans.Service record : serviceRecordList){
1283 recipe = catalogDbClient.getFirstByServiceModelUUIDAndAction(record.getModelUUID(),action.toString());
1292 //if an aLaCarte flag was sent in the request, throw an error if the recipe was not found
1293 RequestParameters reqParam = requestDetails.getRequestParameters();
1294 if(reqParam!=null && alaCarteFlag && recipe==null){
1296 } else if(!alaCarteFlag && recipe != null && Action.createInstance.equals(action)) {
1297 mapToLegacyRequest(requestDetails);
1298 }else if (recipe == null) { //aLaCarte wasn't sent, so we'll try the default
1299 serviceRecord = catalogDbClient.getFirstByModelNameOrderByModelVersionDesc(defaultServiceModelName);
1300 recipe = catalogDbClient.getFirstByServiceModelUUIDAndAction(serviceRecord.getModelUUID(),action.toString());
1302 if(modelInfo.getModelVersionId() == null) {
1303 modelInfo.setModelVersionId(serviceRecord.getModelUUID());
1308 return new RecipeLookupResult (recipe.getOrchestrationUri (), recipe.getRecipeTimeout ());
1311 protected void mapToLegacyRequest(RequestDetails requestDetails) throws IOException {
1312 RequestParameters reqParam;
1313 if (requestDetails.getRequestParameters() == null) {
1314 reqParam = new RequestParameters();
1316 reqParam = requestDetails.getRequestParameters();
1318 if(requestDetails.getCloudConfiguration() == null) {
1319 CloudConfiguration cloudConfig = configureCloudConfig(reqParam);
1320 if(cloudConfig != null) {
1321 requestDetails.setCloudConfiguration(cloudConfig);
1325 List<Map<String, Object>> userParams = configureUserParams(reqParam);
1326 if(!userParams.isEmpty()) {
1327 if (reqParam == null) {
1328 requestDetails.setRequestParameters(new RequestParameters());
1330 requestDetails.getRequestParameters().setUserParams(userParams);
1334 protected CloudConfiguration configureCloudConfig(RequestParameters reqParams) throws IOException {
1336 for(Map<String, Object> params : reqParams.getUserParams()){
1337 if(params.containsKey("service")){
1338 Service service = serviceMapper(params);
1340 Optional<CloudConfiguration> targetConfiguration = addCloudConfig(service.getCloudConfiguration());
1342 if (targetConfiguration.isPresent()) {
1343 return targetConfiguration.get();
1345 for(Networks network : service.getResources().getNetworks()) {
1346 targetConfiguration = addCloudConfig(network.getCloudConfiguration());
1347 if(targetConfiguration.isPresent()) {
1348 return targetConfiguration.get();
1352 for(Vnfs vnf : service.getResources().getVnfs()) {
1353 targetConfiguration = addCloudConfig(vnf.getCloudConfiguration());
1355 if(targetConfiguration.isPresent()) {
1356 return targetConfiguration.get();
1359 for(VfModules vfModule : vnf.getVfModules()) {
1360 targetConfiguration = addCloudConfig(vfModule.getCloudConfiguration());
1362 if(targetConfiguration.isPresent()) {
1363 return targetConfiguration.get();
1374 private Optional<CloudConfiguration> addCloudConfig(CloudConfiguration sourceCloudConfiguration) {
1375 CloudConfiguration targetConfiguration = new CloudConfiguration();
1376 if(sourceCloudConfiguration != null) {
1377 targetConfiguration.setAicNodeClli(sourceCloudConfiguration.getAicNodeClli());
1378 targetConfiguration.setTenantId(sourceCloudConfiguration.getTenantId());
1379 targetConfiguration.setLcpCloudRegionId(sourceCloudConfiguration.getLcpCloudRegionId());
1380 targetConfiguration.setCloudOwner(sourceCloudConfiguration.getCloudOwner());
1381 return Optional.of(targetConfiguration);
1383 return Optional.empty();
1386 protected List<Map<String, Object>> configureUserParams(RequestParameters reqParams) throws IOException {
1387 msoLogger.debug("Configuring UserParams for Macro Request");
1388 Map<String, Object> userParams = new HashMap<>();
1390 for(Map<String, Object> params : reqParams.getUserParams()){
1391 if(params.containsKey("service")){
1392 Service service = serviceMapper(params);
1394 addUserParams(userParams, service.getInstanceParams());
1396 for(Networks network : service.getResources().getNetworks()) {
1397 addUserParams(userParams, network.getInstanceParams());
1400 for(Vnfs vnf: service.getResources().getVnfs()) {
1401 addUserParams(userParams, vnf.getInstanceParams());
1403 for(VfModules vfModule: vnf.getVfModules()) {
1404 addUserParams(userParams, vfModule.getInstanceParams());
1410 return mapFlatMapToNameValue(userParams);
1413 private Service serviceMapper(Map<String, Object> params)
1414 throws JsonProcessingException, IOException, JsonParseException, JsonMappingException {
1415 ObjectMapper obj = new ObjectMapper();
1416 String input = obj.writeValueAsString(params.get("service"));
1417 return obj.readValue(input, Service.class);
1420 private void addUserParams(Map<String, Object> targetUserParams, List<Map<String, String>> sourceUserParams) {
1421 for(Map<String, String> map : sourceUserParams) {
1422 for (Map.Entry<String, String> entry : map.entrySet()) {
1423 targetUserParams.put(entry.getKey(), entry.getValue());
1428 protected List<Map<String, Object>> mapFlatMapToNameValue(Map<String, Object> flatMap) {
1429 List<Map<String, Object>> targetUserParams = new ArrayList<>();
1431 for(Map.Entry<String, Object> map : flatMap.entrySet()) {
1432 Map<String, Object> targetMap = new HashMap<>();
1433 targetMap.put(NAME, map.getKey());
1434 targetMap.put(VALUE, map.getValue());
1435 targetUserParams.add(targetMap);
1437 return targetUserParams;
1440 private RecipeLookupResult getVnfOrVfModuleUri(ServiceInstancesRequest servInstReq, Actions action) throws ValidationException {
1442 ModelInfo modelInfo = servInstReq.getRequestDetails().getModelInfo();
1443 String vnfComponentType = modelInfo.getModelType().name();
1445 RelatedInstanceList[] instanceList = null;
1446 if (servInstReq.getRequestDetails() != null) {
1447 instanceList = servInstReq.getRequestDetails().getRelatedInstanceList();
1450 Recipe recipe = null;
1451 String defaultSource = getDefaultModel(servInstReq);
1452 String modelCustomizationId = modelInfo.getModelCustomizationId();
1453 String modelCustomizationName = modelInfo.getModelCustomizationName();
1454 String relatedInstanceModelVersionId = null;
1455 String relatedInstanceModelInvariantId = null;
1456 String relatedInstanceVersion = null;
1457 String relatedInstanceModelCustomizationName = null;
1459 if (instanceList != null) {
1461 for(RelatedInstanceList relatedInstanceList : instanceList){
1463 RelatedInstance relatedInstance = relatedInstanceList.getRelatedInstance();
1464 ModelInfo relatedInstanceModelInfo = relatedInstance.getModelInfo();
1465 if(relatedInstanceModelInfo.getModelType().equals(ModelType.service)){
1466 relatedInstanceModelVersionId = relatedInstanceModelInfo.getModelVersionId();
1467 relatedInstanceVersion = relatedInstanceModelInfo.getModelVersion();
1470 if(relatedInstanceModelInfo.getModelType().equals(ModelType.vnf)){
1471 relatedInstanceModelVersionId = relatedInstanceModelInfo.getModelVersionId();
1472 relatedInstanceModelInvariantId = relatedInstanceModelInfo.getModelInvariantId();
1473 relatedInstanceVersion = relatedInstanceModelInfo.getModelVersion();
1474 relatedInstanceModelCustomizationName = relatedInstanceModelInfo.getModelCustomizationName();
1478 if(modelInfo.getModelType().equals(ModelType.vnf)) {
1479 // a. For a vnf request (only create, no update currently):
1480 // i. (v3-v4) If modelInfo.modelCustomizationId is provided, use it to validate catalog DB has record in vnf_resource_customization.model_customization_uuid.
1481 // 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
1482 // been provided (else create request should be rejected). APIH should use the relatedInstance.modelInfo[service].modelVersionId** + modelInfo[vnf].modelCustomizationName
1483 // to “join�? service_to_resource_customizations with vnf_resource_customization to confirm a vnf_resource_customization.model_customization_uuid record exists.
1484 // **If relatedInstance.modelInfo[service].modelVersionId was not provided, use relatedInstance.modelInfo[service].modelInvariantId + modelVersion instead to lookup modelVersionId
1485 // (MODEL_UUID) in SERVICE table.
1486 // 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
1487 // during 1707 data migration if VID did not provide it originally on request.
1488 // iv. Note: continue to construct the “vnf-type�? value and pass to BPMN (must still be populated in A&AI).
1489 // 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.
1491 VnfResource vnfResource = null;
1492 VnfResourceCustomization vrc=null;
1493 // Validation for vnfResource
1495 if(modelCustomizationId!=null) {
1496 vrc = catalogDbClient.getVnfResourceCustomizationByModelCustomizationUUID(modelCustomizationId);
1498 vnfResource = vrc.getVnfResources();
1501 org.onap.so.db.catalog.beans.Service service = catalogDbClient.getServiceByID(relatedInstanceModelVersionId);
1502 if(service == null) {
1503 service = catalogDbClient.getServiceByModelVersionAndModelInvariantUUID(relatedInstanceVersion, relatedInstanceModelInvariantId);
1506 if(service == null) {
1507 throw new ValidationException("service in relatedInstance");
1509 for (VnfResourceCustomization vnfResourceCustom : service.getVnfCustomizations()) {
1510 if (vnfResourceCustom.getModelInstanceName().equals(modelCustomizationName)) {
1511 vrc=vnfResourceCustom;
1516 vnfResource = vrc.getVnfResources();
1517 modelInfo.setModelCustomizationId(vrc.getModelCustomizationUUID());
1518 modelInfo.setModelCustomizationUuid(vrc.getModelCustomizationUUID());
1522 if(vnfResource==null){
1523 throw new ValidationException("vnfResource");
1525 if(modelInfo.getModelVersionId() == null) {
1526 modelInfo.setModelVersionId(vnfResource.getModelUUID());
1530 VnfRecipe vnfRecipe = null;
1533 String nfRole = vrc.getNfRole();
1534 if(nfRole != null) {
1535 vnfRecipe = catalogDbClient.getFirstVnfRecipeByNfRoleAndAction(vrc.getNfRole(), action.toString());
1539 if(vnfRecipe == null) {
1540 vnfRecipe = catalogDbClient.getFirstVnfRecipeByNfRoleAndAction(defaultSource, action.toString());
1543 if (vnfRecipe == null) {
1547 return new RecipeLookupResult (vnfRecipe.getOrchestrationUri(), vnfRecipe.getRecipeTimeout());
1549 /* (v5-v7) If modelInfo.modelCustomizationId is NOT provided (because it is a pre-1702 ASDC model or pre-v3), then modelInfo.modelCustomizationName must have
1550 // been provided (else create request should be rejected). APIH should use the relatedInstance.modelInfo[vnf].modelVersionId + modelInfo[vnf].modelCustomizationName
1551 // to join vnf_to_resource_customizations with vf_resource_customization to confirm a vf_resource_customization.model_customization_uuid record exists.
1552 // 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.
1553 // 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
1554 // confirm record matches request data (and to identify the modelCustomizationId associated with the vfModule in the request). This means taking each record found
1555 // 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)
1556 // and MODEL_VERSION (modelVersion).
1558 VfModuleCustomization vfmc = null;
1560 VnfResourceCustomization vnfrc;
1561 VfModule vfModule = null;
1563 if(modelInfo.getModelCustomizationId() != null) {
1564 vfmc = catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID(modelInfo.getModelCustomizationId());
1566 vnfr = catalogDbClient.getVnfResourceByModelUUID(relatedInstanceModelVersionId);
1568 vnfr = catalogDbClient.getFirstVnfResourceByModelInvariantUUIDAndModelVersion(relatedInstanceModelInvariantId, relatedInstanceVersion);
1570 vnfrc = catalogDbClient.getFirstVnfResourceCustomizationByModelInstanceNameAndVnfResources(relatedInstanceModelCustomizationName, vnfr);
1572 List<VfModuleCustomization> list = vnfrc.getVfModuleCustomizations();
1574 String vfModuleModelUUID = modelInfo.getModelVersionId();
1575 for(VfModuleCustomization vf : list) {
1576 VfModuleCustomization vfmCustom;
1577 if(vfModuleModelUUID != null){
1578 vfmCustom = catalogDbClient.getVfModuleCustomizationByModelCustomizationUUIDAndVfModuleModelUUID(vf.getModelCustomizationUUID(), vfModuleModelUUID);
1579 if(vfmCustom != null){
1580 vfModule = vfmCustom.getVfModule();
1583 vfmCustom = catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID(vf.getModelCustomizationUUID());
1584 if(vfmCustom != null){
1585 vfModule = vfmCustom.getVfModule();
1587 vfModule = catalogDbClient.getVfModuleByModelInvariantUUIDAndModelVersion(relatedInstanceModelInvariantId, relatedInstanceVersion);
1591 if(vfModule != null) {
1592 modelInfo.setModelCustomizationId(vf.getModelCustomizationUUID());
1593 modelInfo.setModelCustomizationUuid(vf.getModelCustomizationUUID());
1599 if(vfmc == null && vfModule == null) {
1600 throw new ValidationException("vfModuleCustomization");
1601 } else if (vfModule == null && vfmc != null) {
1602 vfModule = vfmc.getVfModule(); // can't be null as vfModuleModelUUID is not-null property in VfModuleCustomization table
1605 if(modelInfo.getModelVersionId() == null) {
1606 modelInfo.setModelVersionId(vfModule.getModelUUID());
1610 recipe = catalogDbClient.getFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction(vfModule.getModelUUID(), vnfComponentType, action.toString());
1612 List<VfModule> vfModuleRecords= catalogDbClient.getVfModuleByModelInvariantUUIDOrderByModelVersionDesc(vfModule.getModelInvariantUUID());
1613 if(!vfModuleRecords.isEmpty()){
1614 for(VfModule record : vfModuleRecords){
1615 recipe = catalogDbClient.getFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction(record.getModelUUID(), vnfComponentType, action.toString());
1622 if(recipe == null) {
1623 recipe = catalogDbClient.getFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction(defaultSource, vnfComponentType, action.toString());
1624 if (recipe == null) {
1625 recipe = catalogDbClient.getFirstVnfComponentsRecipeByVnfComponentTypeAndAction(vnfComponentType, action.toString());
1628 if(recipe == null) {
1635 if(modelInfo.getModelType().equals(ModelType.vnf)) {
1636 recipe = catalogDbClient.getFirstVnfRecipeByNfRoleAndAction(defaultSource, action.toString());
1637 if (recipe == null) {
1641 recipe = catalogDbClient.getFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction(defaultSource, vnfComponentType, action.toString());
1643 if (recipe == null) {
1649 return new RecipeLookupResult (recipe.getOrchestrationUri (), recipe.getRecipeTimeout ());
1652 private RecipeLookupResult getDefaultVnfUri(ServiceInstancesRequest sir, Actions action) {
1654 String defaultSource = getDefaultModel(sir);
1656 VnfRecipe vnfRecipe = catalogDbClient.getFirstVnfRecipeByNfRoleAndAction(defaultSource, action.toString());
1658 if (vnfRecipe == null) {
1662 return new RecipeLookupResult (vnfRecipe.getOrchestrationUri(), vnfRecipe.getRecipeTimeout());
1666 private RecipeLookupResult getNetworkUri(ServiceInstancesRequest sir, Actions action) throws ValidationException {
1668 String defaultNetworkType = getDefaultModel(sir);
1670 ModelInfo modelInfo = sir.getRequestDetails().getModelInfo();
1671 String modelName = modelInfo.getModelName();
1672 Recipe recipe = null;
1674 if(modelInfo.getModelCustomizationId()!=null){
1675 NetworkResource networkResource = catalogDbClient.getNetworkResourceCustomizationByModelCustomizationUUID(modelInfo.getModelCustomizationId()).getNetworkResource();
1676 if(networkResource!=null){
1677 if(modelInfo.getModelVersionId() == null) {
1678 modelInfo.setModelVersionId(networkResource.getModelUUID());
1680 recipe = catalogDbClient.getFirstNetworkRecipeByModelNameAndAction(networkResource.getModelName(), action.toString());
1682 throw new ValidationException("no catalog entry found");
1685 //ok for version < 3 and action delete
1686 if(modelName != null){
1687 recipe = catalogDbClient.getFirstNetworkRecipeByModelNameAndAction(modelName, action.toString());
1692 recipe = catalogDbClient.getFirstNetworkRecipeByModelNameAndAction(defaultNetworkType, action.toString());
1695 return recipe !=null ? new RecipeLookupResult(recipe.getOrchestrationUri(), recipe.getRecipeTimeout()) : null;
1698 private Optional<String> retrieveModelName(RequestParameters requestParams) {
1699 String requestTestApi = null;
1700 TestApi testApi = null;
1702 if (requestParams != null) {
1703 requestTestApi = requestParams.getTestApi();
1706 if (requestTestApi == null) {
1707 if(requestParams != null && requestParams.getALaCarte() != null && !requestParams.getALaCarte()) {
1708 requestTestApi = env.getProperty(CommonConstants.MACRO_TEST_API);
1710 requestTestApi = env.getProperty(CommonConstants.ALACARTE_TEST_API);
1715 testApi = TestApi.valueOf(requestTestApi);
1716 return Optional.of(testApi.getModelName());
1717 } catch (Exception e) {
1718 msoLogger.warnSimple("Catching the exception on the valueOf enum call and continuing", e);
1719 throw new IllegalArgumentException("Invalid TestApi is provided", e);
1723 private String getDefaultModel(ServiceInstancesRequest sir) {
1724 String defaultModel = sir.getRequestDetails().getRequestInfo().getSource() + "_DEFAULT";
1725 Optional<String> oModelName = retrieveModelName(sir.getRequestDetails().getRequestParameters());
1726 if (oModelName.isPresent()) {
1727 defaultModel = oModelName.get();
1729 return defaultModel;
1732 private Response configurationRecipeLookup(String requestJSON, Action action, HashMap<String, String> instanceIdMap, String version, String requestId, String requestUri) throws ApiException {
1733 String serviceInstanceId = (instanceIdMap ==null)? null:instanceIdMap.get("serviceInstanceId");
1734 Boolean aLaCarte = null;
1735 String apiVersion = version.substring(1);
1737 long startTime = System.currentTimeMillis ();
1738 ServiceInstancesRequest sir = null;
1740 sir = convertJsonToServiceInstanceRequest(requestJSON, action, startTime, sir, msoRequest, requestId, requestUri);
1741 String requestScope = deriveRequestScope(action,sir, requestUri);
1742 InfraActiveRequests currentActiveReq = msoRequest.createRequestObject ( sir, action, requestId, Status.IN_PROGRESS, requestJSON, requestScope);
1743 if(sir.getRequestDetails().getRequestParameters() != null){
1744 aLaCarte = sir.getRequestDetails().getRequestParameters().getALaCarte();
1746 parseRequest(sir, instanceIdMap, action, version, requestJSON, aLaCarte, requestId, currentActiveReq);
1747 setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
1748 String instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();
1750 InfraActiveRequests dup = null;
1752 dup = duplicateCheck(action, instanceIdMap, startTime, msoRequest, instanceName,requestScope, currentActiveReq);
1754 if (instanceIdMap != null && dup != null) {
1755 buildErrorOnDuplicateRecord(currentActiveReq, action, instanceIdMap, startTime, msoRequest, instanceName, requestScope, dup);
1758 ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
1759 RequestReferences referencesResponse = new RequestReferences();
1760 referencesResponse.setRequestId(requestId);
1761 serviceResponse.setRequestReferences(referencesResponse);
1764 String orchestrationUri = env.getProperty(CommonConstants.ALACARTE_ORCHESTRATION);
1765 String timeOut = env.getProperty(CommonConstants.ALACARTE_RECIPE_TIMEOUT);
1767 if (StringUtils.isBlank(orchestrationUri) || StringUtils.isBlank(timeOut)) {
1768 String error = StringUtils.isBlank(orchestrationUri) ? "ALaCarte Orchestration URI not found in properties" : "ALaCarte Recipe Timeout not found in properties";
1770 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, MsoLogger.ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1773 ValidateException validateException = new ValidateException.Builder(error, HttpStatus.SC_NOT_FOUND, ErrorNumbers.SVC_GENERAL_SERVICE_ERROR)
1774 .errorInfo(errorLoggerInfo).build();
1776 updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1778 throw validateException;
1782 serviceInstanceId = "";
1783 String configurationId = "";
1784 String correlationId = "";
1786 if(sir.getServiceInstanceId () != null){
1787 serviceInstanceId = sir.getServiceInstanceId ();
1790 if(sir.getConfigurationId() != null){
1791 configurationId = sir.getConfigurationId();
1794 correlationId = getCorrelationId(sir);
1797 infraActiveRequestsClient.save(currentActiveReq);
1798 }catch(Exception e){
1799 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, MsoLogger.ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1800 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e)
1801 .errorInfo(errorLoggerInfo).build();
1804 if(!requestScope.equalsIgnoreCase(ModelType.service.name())){
1806 }else if(aLaCarte == null){
1809 RequestClientParameter requestClientParameter = null;
1811 requestClientParameter = new RequestClientParameter.Builder()
1812 .setRequestId(requestId)
1813 .setBaseVfModule(false)
1814 .setRecipeTimeout(Integer.parseInt(timeOut))
1815 .setRequestAction(action.toString())
1816 .setServiceInstanceId(serviceInstanceId)
1817 .setCorrelationId(correlationId)
1818 .setConfigurationId(configurationId)
1819 .setRequestDetails(mapJSONtoMSOStyle(requestJSON, sir, aLaCarte, action))
1820 .setApiVersion(apiVersion)
1821 .setALaCarte(aLaCarte)
1822 .setRequestUri(requestUri).build();
1823 } catch (IOException e) {
1824 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1825 throw new ValidateException.Builder("Unable to generate RequestClientParamter object" + e.getMessage(), HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER)
1826 .errorInfo(errorLoggerInfo).build();
1829 return postBPELRequest(currentActiveReq, requestClientParameter, orchestrationUri, requestScope);
1832 public String getRequestId(ContainerRequestContext requestContext) throws ValidateException {
1833 String requestId = null;
1834 if (requestContext.getProperty("requestId") != null) {
1835 requestId = requestContext.getProperty("requestId").toString();
1837 if (UUIDChecker.isValidUUID(requestId)) {
1840 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, MsoLogger.ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1841 ValidateException validateException = new ValidateException.Builder("Request Id " + requestId + " is not a valid UUID", HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER)
1842 .errorInfo(errorLoggerInfo).build();
1844 throw validateException;
1847 public void updateStatus(InfraActiveRequests aq, Status status, String errorMessage) throws RequestDbFailureException{
1848 if ((status == Status.FAILED) || (status == Status.COMPLETE)) {
1849 aq.setStatusMessage (errorMessage);
1850 aq.setProgress(new Long(100));
1851 aq.setRequestStatus(status.toString());
1852 Timestamp endTimeStamp = new Timestamp (System.currentTimeMillis());
1853 aq.setEndTime (endTimeStamp);
1855 infraActiveRequestsClient.save(aq);
1856 }catch(Exception e){
1857 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, MsoLogger.ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1858 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e)
1859 .errorInfo(errorLoggerInfo).build();
1863 protected String getServiceType(String requestScope, ServiceInstancesRequest sir, Boolean aLaCarteFlag){
1864 String serviceType = null;
1865 if(requestScope.equalsIgnoreCase(ModelType.service.toString())){
1866 String defaultServiceModelName = getDefaultModel(sir);
1867 org.onap.so.db.catalog.beans.Service serviceRecord;
1869 serviceRecord = catalogDbClient.getFirstByModelNameOrderByModelVersionDesc(defaultServiceModelName);
1870 if(serviceRecord != null){
1871 serviceType = serviceRecord.getServiceType();
1874 serviceRecord = catalogDbClient.getServiceByID(sir.getRequestDetails().getModelInfo().getModelVersionId());
1875 if(serviceRecord != null){
1876 serviceType = serviceRecord.getServiceType();
1878 serviceRecord = catalogDbClient.getFirstByModelNameOrderByModelVersionDesc(defaultServiceModelName);
1879 if(serviceRecord != null){
1880 serviceType = serviceRecord.getServiceType();
1885 serviceType = msoRequest.getServiceInstanceType(sir, requestScope);