2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.openecomp.sdc.be.servlets;
23 import com.google.gson.reflect.TypeToken;
24 import com.jcabi.aspects.Loggable;
25 import fj.data.Either;
26 import io.swagger.annotations.*;
27 import org.apache.http.HttpStatus;
28 import com.fasterxml.jackson.databind.ObjectMapper;
29 import org.openecomp.sdc.be.components.impl.ServiceBusinessLogic;
30 import org.openecomp.sdc.be.components.lifecycle.LifecycleChangeInfoWithAction;
31 import org.openecomp.sdc.be.config.BeEcompErrorManager;
32 import org.openecomp.sdc.be.dao.api.ActionStatus;
33 import org.openecomp.sdc.be.datamodel.ServiceRelations;
34 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
35 import org.openecomp.sdc.be.model.*;
36 import org.openecomp.sdc.be.resources.data.auditing.AuditingActionEnum;
37 import org.openecomp.sdc.common.api.Constants;
38 import org.openecomp.sdc.common.datastructure.Wrapper;
39 import org.openecomp.sdc.exception.ResponseFormat;
40 import org.slf4j.Logger;
41 import org.slf4j.LoggerFactory;
43 import javax.inject.Singleton;
44 import javax.servlet.ServletContext;
45 import javax.servlet.http.HttpServletRequest;
47 import javax.ws.rs.core.Context;
48 import javax.ws.rs.core.MediaType;
49 import javax.ws.rs.core.Response;
50 import java.lang.reflect.Type;
51 import java.util.ArrayList;
52 import java.util.List;
55 @Loggable(prepend = true, value = Loggable.DEBUG, trim = false)
57 @Api(value = "Service Catalog", description = "Service Servlet")
59 public class ServiceServlet extends AbstractValidationsServlet {
61 private static final Logger log = LoggerFactory.getLogger(ServiceServlet.class);
65 @Consumes(MediaType.APPLICATION_JSON)
66 @Produces(MediaType.APPLICATION_JSON)
67 @ApiOperation(value = "Create Service", httpMethod = "POST", notes = "Returns created service", response = Service.class)
68 @ApiResponses(value = { @ApiResponse(code = 201, message = "Service created"), @ApiResponse(code = 403, message = "Restricted operation"), @ApiResponse(code = 400, message = "Invalid content / Missing content"),
69 @ApiResponse(code = 409, message = "Service already exist") })
70 public Response createService(@ApiParam(value = "Service object to be created", required = true) String data, @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
72 ServletContext context = request.getSession().getServletContext();
73 String url = request.getMethod() + " " + request.getRequestURI();
74 log.debug("Start handle request of {}", url);
76 User modifier = new User();
77 modifier.setUserId(userId);
78 log.debug("modifier id is {}", userId);
80 Response response = null;
82 ServiceBusinessLogic businessLogic = getServiceBL(context);
83 Either<Service, ResponseFormat> convertResponse = parseToService(data, modifier);
84 if (convertResponse.isRight()) {
85 log.debug("failed to parse service");
86 response = buildErrorResponse(convertResponse.right().value());
90 Service service = convertResponse.left().value();
91 Either<Service, ResponseFormat> actionResponse = businessLogic.createService(service, modifier);
93 if (actionResponse.isRight()) {
94 log.debug("Failed to create service");
95 response = buildErrorResponse(actionResponse.right().value());
99 Object result = RepresentationUtils.toRepresentation(actionResponse.left().value());
100 response = buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.CREATED), result);
103 } catch (Exception e) {
104 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Create Service");
105 log.debug("create service failed with exception", e);
106 response = buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
111 public Either<Service, ResponseFormat> parseToService(String serviceJson, User user) {
112 return getComponentsUtils().convertJsonToObjectUsingObjectMapper(serviceJson, user, Service.class, AuditingActionEnum.CREATE_RESOURCE, ComponentTypeEnum.SERVICE);
116 @Path("/services/validate-name/{serviceName}")
117 @Consumes(MediaType.APPLICATION_JSON)
118 @Produces(MediaType.APPLICATION_JSON)
119 @ApiOperation(value = "validate service name", httpMethod = "GET", notes = "checks if the chosen service name is available ", response = Response.class)
120 @ApiResponses(value = { @ApiResponse(code = 200, message = "Service found"), @ApiResponse(code = 403, message = "Restricted operation") })
121 public Response validateServiceName(@PathParam("serviceName") final String serviceName, @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
122 ServletContext context = request.getSession().getServletContext();
123 String url = request.getMethod() + " " + request.getRequestURI();
124 log.debug("Start handle request of {}", url);
127 User modifier = new User();
128 modifier.setUserId(userId);
129 log.debug("modifier id is {}", userId);
130 Response response = null;
132 ServiceBusinessLogic businessLogic = getServiceBL(context);
134 Either<Map<String, Boolean>, ResponseFormat> actionResponse = businessLogic.validateServiceNameExists(serviceName, userId);
136 if (actionResponse.isRight()) {
137 log.debug("failed to get validate service name");
138 response = buildErrorResponse(actionResponse.right().value());
141 return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), actionResponse.left().value());
142 } catch (Exception e) {
143 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Validate Service Name");
144 log.debug("validate service name failed with exception", e);
145 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
150 @Path("/audit-records/{componentType}/{componentUniqueId}")
151 @Consumes(MediaType.APPLICATION_JSON)
152 @Produces(MediaType.APPLICATION_JSON)
153 @ApiOperation(value = "get component audit records", httpMethod = "GET", notes = "get audit records for a service or a resource", response = Response.class)
154 @ApiResponses(value = { @ApiResponse(code = 200, message = "Service found"), @ApiResponse(code = 403, message = "Restricted operation") })
155 public Response getComponentAuditRecords(@PathParam("componentType") final String componentType, @PathParam("componentUniqueId") final String componentUniqueId, @Context final HttpServletRequest request,
156 @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
158 ServletContext context = request.getSession().getServletContext();
159 String url = request.getMethod() + " " + request.getRequestURI();
160 log.debug("Start handle request of {}", url);
162 User modifier = new User();
163 modifier.setUserId(userId);
164 log.debug("modifier id is {}", userId);
165 Wrapper<Response> responseWrapper = new Wrapper<Response>();
166 Wrapper<String> uuidWrapper = new Wrapper<>();
167 Wrapper<String> versionWrapper = new Wrapper<>();
168 Wrapper<User> userWrapper = new Wrapper<>();
169 Wrapper<ComponentTypeEnum> componentWrapper = new Wrapper<ComponentTypeEnum>();
171 validateUserExist(responseWrapper, userWrapper, userId);
173 if (responseWrapper.isEmpty()) {
174 validateComponentType(responseWrapper, componentWrapper, componentType);
177 if (responseWrapper.isEmpty()) {
178 fillUUIDAndVersion(responseWrapper, uuidWrapper, versionWrapper, userWrapper.getInnerElement(), componentWrapper.getInnerElement(), componentUniqueId, context);
181 if (responseWrapper.isEmpty()) {
182 Either<List<Map<String, Object>>, ResponseFormat> eitherServiceAudit = getServiceBL(context).getComponentAuditRecords(versionWrapper.getInnerElement(), uuidWrapper.getInnerElement(), userId);
184 if (eitherServiceAudit.isRight()) {
185 Response errorResponse = buildErrorResponse(eitherServiceAudit.right().value());
186 responseWrapper.setInnerElement(errorResponse);
188 List<Map<String, Object>> auditRecords = eitherServiceAudit.left().value();
189 Response okResponse = buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), auditRecords);
190 responseWrapper.setInnerElement(okResponse);
195 } catch (Exception e) {
196 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Validate Service Name");
197 log.debug("get Service Audit Records failed with exception", e);
198 Response errorResponse = buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
199 responseWrapper.setInnerElement(errorResponse);
201 return responseWrapper.getInnerElement();
204 private void fillUUIDAndVersion(Wrapper<Response> responseWrapper, Wrapper<String> uuidWrapper, Wrapper<String> versionWrapper, User user, final ComponentTypeEnum componentTypeEnum, final String componentUniqueId, ServletContext context) {
206 if (componentTypeEnum == ComponentTypeEnum.RESOURCE) {
207 Either<Resource, ResponseFormat> eitherResource = getResourceBL(context).getResource(componentUniqueId, user);
208 if (eitherResource.isLeft()) {
209 uuidWrapper.setInnerElement(eitherResource.left().value().getUUID());
210 versionWrapper.setInnerElement(eitherResource.left().value().getVersion());
212 responseWrapper.setInnerElement(buildErrorResponse(eitherResource.right().value()));
216 Either<Service, ResponseFormat> eitherService = getServiceBL(context).getService(componentUniqueId, user);
217 if (eitherService.isLeft()) {
218 uuidWrapper.setInnerElement(eitherService.left().value().getUUID());
219 versionWrapper.setInnerElement(eitherService.left().value().getVersion());
221 responseWrapper.setInnerElement(buildErrorResponse(eitherService.right().value()));
228 @Path("/services/{serviceId}")
229 public Response deleteService(@PathParam("serviceId") final String serviceId, @Context final HttpServletRequest request) {
230 ServletContext context = request.getSession().getServletContext();
231 String url = request.getMethod() + " " + request.getRequestURI();
232 log.debug("Start handle request of {}", url);
235 String userId = request.getHeader(Constants.USER_ID_HEADER);
236 User modifier = new User();
237 modifier.setUserId(userId);
238 log.debug("modifier id is {}", userId);
240 Response response = null;
243 String serviceIdLower = serviceId.toLowerCase();
244 ServiceBusinessLogic businessLogic = getServiceBL(context);
245 ResponseFormat actionResponse = businessLogic.deleteService(serviceIdLower, modifier);
247 if (actionResponse.getStatus() != HttpStatus.SC_NO_CONTENT) {
248 log.debug("failed to delete service");
249 response = buildErrorResponse(actionResponse);
252 response = buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT), null);
255 } catch (Exception e) {
256 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Delete Service");
257 log.debug("delete service failed with exception", e);
258 response = buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
265 @Path("/services/{serviceName}/{version}")
266 public Response deleteServiceByNameAndVersion(@PathParam("serviceName") final String serviceName, @PathParam("version") final String version, @Context final HttpServletRequest request) {
267 ServletContext context = request.getSession().getServletContext();
268 String url = request.getMethod() + " " + request.getRequestURI();
269 log.debug("Start handle request of {}", url);
272 String userId = request.getHeader(Constants.USER_ID_HEADER);
273 User modifier = new User();
274 modifier.setUserId(userId);
275 log.debug("modifier id is {}", userId);
277 Response response = null;
280 ServiceBusinessLogic businessLogic = getServiceBL(context);
281 ResponseFormat actionResponse = businessLogic.deleteServiceByNameAndVersion(serviceName, version, modifier);
283 if (actionResponse.getStatus() != HttpStatus.SC_NO_CONTENT) {
284 log.debug("failed to delete service");
285 response = buildErrorResponse(actionResponse);
288 response = buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT), null);
291 } catch (Exception e) {
292 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Delete Service");
293 log.debug("delete service failed with exception", e);
294 response = buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
301 @Path("/services/{serviceId}/metadata")
302 @Consumes(MediaType.APPLICATION_JSON)
303 @Produces(MediaType.APPLICATION_JSON)
304 @ApiOperation(value = "Update Service Metadata", httpMethod = "PUT", notes = "Returns updated service", response = Service.class)
305 @ApiResponses(value = { @ApiResponse(code = 200, message = "Service Updated"), @ApiResponse(code = 403, message = "Restricted operation"), @ApiResponse(code = 400, message = "Invalid content / Missing content") })
306 public Response updateServiceMetadata(@PathParam("serviceId") final String serviceId, @ApiParam(value = "Service object to be Updated", required = true) String data, @Context final HttpServletRequest request,
307 @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
309 ServletContext context = request.getSession().getServletContext();
310 String url = request.getMethod() + " " + request.getRequestURI();
311 log.debug("Start handle request of {}", url);
313 User modifier = new User();
314 modifier.setUserId(userId);
315 log.debug("modifier id is {}", userId);
317 Response response = null;
320 String serviceIdLower = serviceId.toLowerCase();
321 ServiceBusinessLogic businessLogic = getServiceBL(context);
323 Either<Service, ResponseFormat> convertResponse = parseToService(data, modifier);
324 if (convertResponse.isRight()) {
325 log.debug("failed to parse service");
326 response = buildErrorResponse(convertResponse.right().value());
329 Service updatedService = convertResponse.left().value();
330 Either<Service, ResponseFormat> actionResponse = businessLogic.updateServiceMetadata(serviceIdLower, updatedService, modifier);
332 if (actionResponse.isRight()) {
333 log.debug("failed to update service");
334 response = buildErrorResponse(actionResponse.right().value());
338 Service service = actionResponse.left().value();
339 Object result = RepresentationUtils.toRepresentation(service);
340 return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), result);
342 } catch (Exception e) {
343 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Update Service Metadata");
344 log.debug("update service metadata failed with exception", e);
345 response = buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
351 * updates group instance property values
352 * Note, than in case of group instance updated successfully, related resourceInstance and containing component modification time will be updated
354 * @param componentInstanceId
355 * @param groupInstanceId
362 @Path("/{containerComponentType}/{serviceId}/resourceInstance/{componentInstanceId}/groupInstance/{groupInstanceId}")
363 @Consumes(MediaType.APPLICATION_JSON)
364 @Produces(MediaType.APPLICATION_JSON)
365 @ApiOperation(value = "Update Group Instance Property Values", httpMethod = "PUT", notes = "Returns updated group instance", response = Service.class)
366 @ApiResponses(value = { @ApiResponse(code = 200, message = "Group Instance Property Values Updated"), @ApiResponse(code = 403, message = "Restricted operation"), @ApiResponse(code = 400, message = "Invalid content / Missing content") })
367 public Response updateGroupInstancePropertyValues(@PathParam("serviceId") final String serviceId,@PathParam("componentInstanceId") final String componentInstanceId, @PathParam("groupInstanceId") final String groupInstanceId, @ApiParam(value = "Group instance object to be Updated", required = true) String data, @Context final HttpServletRequest request,
368 @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
370 Response response = null;
371 ServletContext context = request.getSession().getServletContext();
372 String url = request.getMethod() + " " + request.getRequestURI();
373 log.debug("Start handle request of {}", url);
375 User modifier = new User();
376 modifier.setUserId(userId);
377 log.debug("modifier id is {}",userId);
379 ServiceBusinessLogic businessLogic;
380 Either<List<GroupInstanceProperty>, ResponseFormat> actionResponse = null;
382 List<GroupInstanceProperty> updatedProperties;
383 Type listType = new TypeToken<ArrayList<GroupInstanceProperty>>(){}.getType();
384 ArrayList<GroupInstanceProperty> newProperties = gson.fromJson(data, listType);
385 if (newProperties == null) {
386 actionResponse = Either.right(getComponentsUtils().getResponseFormat(ActionStatus.INVALID_CONTENT));
388 if(actionResponse == null){
389 log.debug("Start handle update group instance property values request. Received group instance is {}", groupInstanceId);
390 businessLogic = getServiceBL(context);
391 actionResponse = businessLogic.updateGroupInstancePropertyValues(modifier, serviceId, componentInstanceId, groupInstanceId, newProperties);
392 if(actionResponse.isRight()){
393 actionResponse = Either.right(actionResponse.right().value());
396 if(actionResponse.isLeft()){
397 updatedProperties = actionResponse.left().value();
398 ObjectMapper mapper = new ObjectMapper();
399 String result = mapper.writeValueAsString(updatedProperties);
400 response = buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), result);
403 response = buildErrorResponse(actionResponse.right().value());
405 } catch (Exception e) {
406 log.error("Exception occured during update Group Instance property values: {}", e.getMessage(), e);
407 response = buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
413 @Path("/services/{serviceId}")
414 @Consumes(MediaType.APPLICATION_JSON)
415 @Produces(MediaType.APPLICATION_JSON)
416 @ApiOperation(value = "Retrieve Service", httpMethod = "GET", notes = "Returns service according to serviceId", response = Service.class)
417 @ApiResponses(value = { @ApiResponse(code = 200, message = "Service found"), @ApiResponse(code = 403, message = "Restricted operation"), @ApiResponse(code = 404, message = "Service not found") })
418 public Response getServiceById(@PathParam("serviceId") final String serviceId, @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
420 ServletContext context = request.getSession().getServletContext();
421 String url = request.getMethod() + " " + request.getRequestURI();
422 log.debug("Start handle request of {}", url);
425 User modifier = new User();
426 modifier.setUserId(userId);
427 log.debug("modifier id is {}", userId);
429 Response response = null;
431 String serviceIdLower = serviceId.toLowerCase();
432 ServiceBusinessLogic businessLogic = getServiceBL(context);
433 log.debug("get service with id {}", serviceId);
434 Either<Service, ResponseFormat> actionResponse = businessLogic.getService(serviceIdLower, modifier);
436 if (actionResponse.isRight()) {
437 log.debug("failed to get service");
438 response = buildErrorResponse(actionResponse.right().value());
442 Service service = actionResponse.left().value();
443 Object result = RepresentationUtils.toRepresentation(service);
445 return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), result);
447 } catch (Exception e) {
448 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get Service");
449 log.debug("get service failed with exception", e);
450 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
456 @Path("/services/serviceName/{serviceName}/serviceVersion/{serviceVersion}")
457 @Consumes(MediaType.APPLICATION_JSON)
458 @Produces(MediaType.APPLICATION_JSON)
459 @ApiOperation(value = "Retrieve Service", httpMethod = "GET", notes = "Returns service according to name and version", response = Service.class)
460 @ApiResponses(value = { @ApiResponse(code = 200, message = "Service found"), @ApiResponse(code = 403, message = "Restricted operation"), @ApiResponse(code = 404, message = "Service not found") })
461 public Response getServiceByNameAndVersion(@PathParam("serviceName") final String serviceName, @PathParam("serviceVersion") final String serviceVersion, @Context final HttpServletRequest request,
462 @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
464 ServletContext context = request.getSession().getServletContext();
466 User modifier = new User();
467 modifier.setUserId(userId);
468 log.debug("modifier id is {}", userId);
470 Response response = null;
472 ServiceBusinessLogic businessLogic = getServiceBL(context);
473 Either<Service, ResponseFormat> actionResponse = businessLogic.getServiceByNameAndVersion(serviceName, serviceVersion, userId);
475 if (actionResponse.isRight()) {
476 response = buildErrorResponse(actionResponse.right().value());
480 Service service = actionResponse.left().value();
481 Object result = RepresentationUtils.toRepresentation(service);
483 return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), result);
485 } catch (Exception e) {
486 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get Service by name and version");
487 log.debug("get service failed with exception", e);
488 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
494 @Path("/services/{serviceId}/distribution-state/{state}")
495 @Consumes(MediaType.APPLICATION_JSON)
496 @Produces(MediaType.APPLICATION_JSON)
497 @ApiOperation(value = "Update Service Distribution State", httpMethod = "POST", notes = "service with the changed distribution status")
498 @ApiResponses(value = { @ApiResponse(code = 200, message = "Service distribution state changed"), @ApiResponse(code = 409, message = "Restricted operation"), @ApiResponse(code = 403, message = "Service is not available for distribution"),
499 @ApiResponse(code = 400, message = "Invalid content / Missing content"), @ApiResponse(code = 404, message = "Requested service was not found"), @ApiResponse(code = 500, message = "Internal Server Error. Please try again later.") })
500 public Response updateServiceDistributionState(@ApiParam(value = "DistributionChangeInfo - get comment out of body", required = true) LifecycleChangeInfoWithAction jsonChangeInfo, @PathParam("serviceId") final String serviceId,
501 @ApiParam(allowableValues = "approve, reject", required = true) @PathParam("state") final String state, @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
503 ServletContext context = request.getSession().getServletContext();
504 String url = request.getMethod() + " " + request.getRequestURI();
505 log.debug("Start handle request of {}", url);
507 User modifier = new User();
508 modifier.setUserId(userId);
509 log.debug("modifier id is {}", userId);
511 Response response = null;
513 ServiceBusinessLogic businessLogic = getServiceBL(context);
514 Either<Service, ResponseFormat> actionResponse = businessLogic.changeServiceDistributionState(serviceId, state, jsonChangeInfo, modifier);
516 if (actionResponse.isRight()) {
517 log.debug("failed to Update Service Distribution State");
518 response = buildErrorResponse(actionResponse.right().value());
521 Service service = actionResponse.left().value();
522 Object result = RepresentationUtils.toRepresentation(service);
524 return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), result);
525 } catch (Exception e) {
526 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Update Service Distribution State");
527 log.debug("updateServiceDistributionState failed with exception", e);
528 response = buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
534 @Path("/services/{serviceId}/distribution/{env}/activate")
535 @Consumes(MediaType.APPLICATION_JSON)
536 @Produces(MediaType.APPLICATION_JSON)
537 @ApiOperation(value = "Activate distribution", httpMethod = "POST", notes = "activate distribution")
538 @ApiResponses(value = { @ApiResponse(code = 200, message = "OK"), @ApiResponse(code = 409, message = "Service cannot be distributed due to missing deployment artifacts"), @ApiResponse(code = 404, message = "Requested service was not found"),
539 @ApiResponse(code = 500, message = "Internal Server Error. Please try again later.") })
540 public Response activateDistribution(@PathParam("serviceId") final String serviceId, @PathParam("env") final String env, @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
542 ServletContext context = request.getSession().getServletContext();
543 String url = request.getMethod() + " " + request.getRequestURI();
544 log.debug("Start handle request of {}", url);
546 User modifier = new User();
547 modifier.setUserId(userId);
548 log.debug("modifier id is {}", userId);
550 Response response = null;
552 ServiceBusinessLogic businessLogic = getServiceBL(context);
553 Either<Service, ResponseFormat> distResponse = businessLogic.activateDistribution(serviceId, env, modifier, request);
555 if (distResponse.isRight()) {
556 log.debug("failed to activate service distribution");
557 response = buildErrorResponse(distResponse.right().value());
560 Service service = distResponse.left().value();
561 Object result = RepresentationUtils.toRepresentation(service);
562 return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), result);
563 } catch (Exception e) {
564 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Activate Distribution");
565 log.debug("activate distribution failed with exception", e);
566 response = buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
572 @Path("/services/{serviceId}/distribution/{did}/markDeployed")
573 @Consumes(MediaType.APPLICATION_JSON)
574 @Produces(MediaType.APPLICATION_JSON)
575 @ApiOperation(value = "Mark distribution as deployed", httpMethod = "POST", notes = "relevant audit record will be created")
576 @ApiResponses(value = { @ApiResponse(code = 200, message = "Service was marked as deployed"), @ApiResponse(code = 409, message = "Restricted operation"), @ApiResponse(code = 403, message = "Service is not available"),
577 @ApiResponse(code = 400, message = "Invalid content / Missing content"), @ApiResponse(code = 404, message = "Requested service was not found"), @ApiResponse(code = 500, message = "Internal Server Error. Please try again later.") })
578 public Response markDistributionAsDeployed(@PathParam("serviceId") final String serviceId, @PathParam("did") final String did, @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
580 ServletContext context = request.getSession().getServletContext();
581 String url = request.getMethod() + " " + request.getRequestURI();
582 log.debug("Start handle request of {}", url);
584 User modifier = new User();
585 modifier.setUserId(userId);
586 log.debug("modifier id is {}", userId);
588 Response response = null;
590 ServiceBusinessLogic businessLogic = getServiceBL(context);
591 Either<Service, ResponseFormat> distResponse = businessLogic.markDistributionAsDeployed(serviceId, did, modifier);
593 if (distResponse.isRight()) {
594 log.debug("failed to mark distribution as deployed");
595 response = buildErrorResponse(distResponse.right().value());
598 Service service = distResponse.left().value();
599 Object result = RepresentationUtils.toRepresentation(service);
600 return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), result);
601 } catch (Exception e) {
602 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Mark Distribution As Deployed");
603 log.debug("mark distribution as deployed failed with exception", e);
604 response = buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
610 @Path("/services/{serviceId}/tempUrlToBeDeleted")
611 @Consumes(MediaType.APPLICATION_JSON)
612 @Produces(MediaType.APPLICATION_JSON)
613 @ApiResponses(value = { @ApiResponse(code = 200, message = "OK"), @ApiResponse(code = 500, message = "Internal Server Error. Please try again later.") })
614 public Response tempUrlToBeDeleted(@PathParam("serviceId") final String serviceId, @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
616 ServletContext context = request.getSession().getServletContext();
617 String url = request.getMethod() + " " + request.getRequestURI();
618 log.debug("Start handle request of {}", url);
620 User modifier = new User();
621 modifier.setUserId(userId);
622 log.debug("modifier id is {}", userId);
626 ServiceBusinessLogic businessLogic = getServiceBL(context);
627 Service service = (businessLogic.getService(serviceId, modifier)).left().value();
628 Either<Service, ResponseFormat> res = businessLogic.updateDistributionStatusForActivation(service, modifier, DistributionStatusEnum.DISTRIBUTED);
631 response = buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
633 return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), null);
634 } catch (Exception e) {
635 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("tempUrlToBeDeleted");
636 log.debug("failed with exception", e);
637 response = buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
644 @Path("/services/{serviceId}/linksMap")
645 @Consumes(MediaType.APPLICATION_JSON)
646 @Produces(MediaType.APPLICATION_JSON)
647 @ApiOperation(value = "Retrieve Service component relations map", httpMethod = "GET", notes = "Returns service components relations", response = ServiceRelations.class)
648 @ApiResponses(value = { @ApiResponse(code = 200, message = "Service found"), @ApiResponse(code = 403, message = "Restricted operation"), @ApiResponse(code = 404, message = "Service not found") })
649 public Response getServiceComponentRelationMap(@PathParam("serviceId") final String serviceId, @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
651 ServletContext context = request.getSession().getServletContext();
652 String url = request.getMethod() + " " + request.getRequestURI();
653 log.debug("Start handle request of {}", url);
656 User modifier = new User();
657 modifier.setUserId(userId);
658 log.debug("modifier id is {}", userId);
660 Response response = null;
662 String serviceIdLower = serviceId.toLowerCase();
663 ServiceBusinessLogic businessLogic = getServiceBL(context);
664 log.debug("get service components relations with id {}", serviceId);
665 Either<ServiceRelations, ResponseFormat> actionResponse = businessLogic.getServiceComponentsRelations(serviceIdLower, modifier);
667 if (actionResponse.isRight()) {
668 log.debug("failed to get service relations data");
669 response = buildErrorResponse(actionResponse.right().value());
673 ServiceRelations serviceRelations = actionResponse.left().value();
674 Object result = RepresentationUtils.toRepresentation(serviceRelations);
676 return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), result);
678 } catch (Exception e) {
679 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get Service");
680 log.debug("get service relations data failed with exception", e);
681 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));