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 java.io.FileNotFoundException;
24 import java.util.ArrayList;
25 import java.util.List;
27 import java.util.Map.Entry;
29 import javax.inject.Singleton;
30 import javax.servlet.ServletContext;
31 import javax.servlet.http.HttpServletRequest;
32 import javax.ws.rs.Consumes;
33 import javax.ws.rs.DELETE;
34 import javax.ws.rs.GET;
35 import javax.ws.rs.HeaderParam;
36 import javax.ws.rs.POST;
37 import javax.ws.rs.PUT;
38 import javax.ws.rs.Path;
39 import javax.ws.rs.PathParam;
40 import javax.ws.rs.Produces;
41 import javax.ws.rs.QueryParam;
42 import javax.ws.rs.core.Context;
43 import javax.ws.rs.core.MediaType;
44 import javax.ws.rs.core.Response;
46 import org.apache.http.HttpStatus;
47 import org.json.JSONObject;
48 import org.openecomp.sdc.be.components.impl.CsarValidationUtils;
49 import org.openecomp.sdc.be.components.impl.ImportUtils;
50 import org.openecomp.sdc.be.components.impl.ResourceBusinessLogic;
51 import org.openecomp.sdc.be.config.BeEcompErrorManager;
52 import org.openecomp.sdc.be.dao.api.ActionStatus;
53 import org.openecomp.sdc.be.datamodel.api.HighestFilterEnum;
54 import org.openecomp.sdc.be.datatypes.components.ResourceMetadataDataDefinition;
55 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
56 import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
57 import org.openecomp.sdc.be.model.PropertyDefinition;
58 import org.openecomp.sdc.be.model.Resource;
59 import org.openecomp.sdc.be.model.ResourceMetadataDefinition;
60 import org.openecomp.sdc.be.model.UploadResourceInfo;
61 import org.openecomp.sdc.be.model.User;
62 import org.openecomp.sdc.be.resources.data.auditing.AuditingActionEnum;
63 import org.openecomp.sdc.be.servlets.ResourceUploadServlet.ResourceAuthorityTypeEnum;
64 import org.openecomp.sdc.common.api.Constants;
65 import org.openecomp.sdc.common.config.EcompErrorName;
66 import org.openecomp.sdc.common.datastructure.Wrapper;
67 import org.openecomp.sdc.exception.ResponseFormat;
68 import org.slf4j.Logger;
69 import org.slf4j.LoggerFactory;
71 import com.jcabi.aspects.Loggable;
72 import com.wordnik.swagger.annotations.Api;
73 import com.wordnik.swagger.annotations.ApiOperation;
74 import com.wordnik.swagger.annotations.ApiParam;
75 import com.wordnik.swagger.annotations.ApiResponse;
76 import com.wordnik.swagger.annotations.ApiResponses;
78 import fj.data.Either;
80 @Loggable(prepend = true, value = Loggable.DEBUG, trim = false)
82 @Api(value = "Resources Catalog", description = "Resources Servlet")
84 public class ResourcesServlet extends AbstractValidationsServlet {
86 private static Logger log = LoggerFactory.getLogger(ResourcesServlet.class.getName());
90 @Consumes(MediaType.APPLICATION_JSON)
91 @Produces(MediaType.APPLICATION_JSON)
92 @ApiOperation(value = "Create Resource", httpMethod = "POST", notes = "Returns created resource", response = Resource.class)
93 @ApiResponses(value = { @ApiResponse(code = 201, message = "Resource created"), @ApiResponse(code = 403, message = "Restricted operation"), @ApiResponse(code = 400, message = "Invalid content / Missing content"),
94 @ApiResponse(code = 409, message = "Resource already exist") })
95 public Response createResource(@ApiParam(value = "Resource object to be created", required = true) String data, @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
97 userId = (userId != null) ? userId : request.getHeader(Constants.USER_ID_HEADER);
100 ServletContext context = request.getSession().getServletContext();
102 String url = request.getMethod() + " " + request.getRequestURI();
103 log.debug("Start handle request of {}", url);
106 User modifier = new User();
107 modifier.setUserId(userId);
108 log.debug("modifier id is {}", userId);
110 Response response = null;
113 Wrapper<Response> responseWrapper = new Wrapper<>();
115 if (isUIImport(data)) {
116 performUIImport(responseWrapper, data, request, userId, null);
121 ResourceBusinessLogic businessLogic = getResourceBL(context);
123 Either<Resource, ResponseFormat> convertResponse = parseToResource(data, modifier);
124 if (convertResponse.isRight()) {
125 log.debug("failed to parse resource");
126 response = buildErrorResponse(convertResponse.right().value());
130 Resource resource = convertResponse.left().value();
131 Either<Resource, ResponseFormat> actionResponse = businessLogic.createResource(resource, modifier, null, null);
133 if (actionResponse.isRight()) {
134 log.debug("failed to create resource");
135 response = buildErrorResponse(actionResponse.right().value());
137 Object representation = RepresentationUtils.toRepresentation(actionResponse.left().value());
138 response = buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.CREATED), representation);
140 responseWrapper.setInnerElement(response);
143 return responseWrapper.getInnerElement();
146 } catch (Exception e) {
147 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Create Resource");
148 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Create Resource");
149 log.debug("create resource failed with exception", e);
150 response = buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
156 private boolean isUIImport(String data) {
159 JSONObject json = new JSONObject(data);
160 String payloadName = json.getString(ImportUtils.Constants.UI_JSON_PAYLOAD_NAME);
161 isUIImport = payloadName != null && !payloadName.isEmpty();
162 } catch (Exception e) {
163 log.debug("failed to parse json sent from client, json:{}", data);
169 private void performUIImport(Wrapper<Response> responseWrapper, String data, final HttpServletRequest request, String userId, String resourceUniqueId) throws FileNotFoundException {
171 Wrapper<User> userWrapper = new Wrapper<>();
172 Wrapper<UploadResourceInfo> uploadResourceInfoWrapper = new Wrapper<>();
173 Wrapper<String> yamlStringWrapper = new Wrapper<>();
174 String resourceInfoJsonString = data;
176 ResourceAuthorityTypeEnum resourceAuthorityEnum = ResourceAuthorityTypeEnum.USER_TYPE_UI;
178 commonGeneralValidations(responseWrapper, userWrapper, uploadResourceInfoWrapper, resourceAuthorityEnum, userId, resourceInfoJsonString);
180 // TODO suspect next line is unnecessary
181 userWrapper.getInnerElement();
182 if (!CsarValidationUtils.isCsarPayloadName(uploadResourceInfoWrapper.getInnerElement().getPayloadName())) {
183 fillPayload(responseWrapper, uploadResourceInfoWrapper, yamlStringWrapper, userWrapper.getInnerElement(), resourceInfoJsonString, resourceAuthorityEnum, null);
185 // PayLoad Validations
186 commonPayloadValidations(responseWrapper, yamlStringWrapper, userWrapper.getInnerElement(), uploadResourceInfoWrapper.getInnerElement());
188 specificResourceAuthorityValidations(responseWrapper, uploadResourceInfoWrapper, yamlStringWrapper, userWrapper.getInnerElement(), request, resourceInfoJsonString, resourceAuthorityEnum);
190 if (responseWrapper.isEmpty()) {
191 handleImport(responseWrapper, userWrapper.getInnerElement(), uploadResourceInfoWrapper.getInnerElement(), yamlStringWrapper.getInnerElement(), resourceAuthorityEnum, true, resourceUniqueId);
195 public Either<Resource, ResponseFormat> parseToResource(String resourceJson, User user) {
196 return getComponentsUtils().convertJsonToObjectUsingObjectMapper(resourceJson, user, Resource.class, AuditingActionEnum.CREATE_RESOURCE, ComponentTypeEnum.RESOURCE);
199 public Either<Resource, ResponseFormat> parseToLightResource(String resourceJson, User user) {
200 Either<Resource, ResponseFormat> ret = getComponentsUtils().convertJsonToObjectUsingObjectMapper(resourceJson, user, Resource.class, AuditingActionEnum.UPDATE_RESOURCE_METADATA, ComponentTypeEnum.RESOURCE);
201 if (ret.isLeft()) {// drop unwanted data (sent from UI in update flow)
202 ret.left().value().setRequirements(null);
203 ret.left().value().setCapabilities(null);
209 @Path("/resources/{resourceId}")
210 public Response deleteResource(@PathParam("resourceId") final String resourceId, @Context final HttpServletRequest request) {
212 ServletContext context = request.getSession().getServletContext();
214 String url = request.getMethod() + " " + request.getRequestURI();
215 log.debug("Start handle request of {}", url);
218 String userId = request.getHeader(Constants.USER_ID_HEADER);
219 User modifier = new User();
220 modifier.setUserId(userId);
221 log.debug("modifier id is {}", userId);
223 Response response = null;
226 String resourceIdLower = resourceId.toLowerCase();
227 ResourceBusinessLogic businessLogic = getResourceBL(context);
228 ResponseFormat actionResponse = businessLogic.deleteResource(resourceIdLower, modifier);
230 if (actionResponse.getStatus() != HttpStatus.SC_NO_CONTENT) {
231 log.debug("failed to delete resource");
232 response = buildErrorResponse(actionResponse);
235 response = buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT), null);
238 } catch (Exception e) {
239 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Delete Resource");
240 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Delete Resource");
241 log.debug("delete resource failed with exception", e);
242 response = buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
249 @Path("/resources/{resourceName}/{version}")
250 public Response deleteResourceByNameAndVersion(@PathParam("resourceName") final String resourceName, @PathParam("version") final String version, @Context final HttpServletRequest request) {
252 ServletContext context = request.getSession().getServletContext();
254 String url = request.getMethod() + " " + request.getRequestURI();
255 log.debug("Start handle request of {}", url);
258 String userId = request.getHeader(Constants.USER_ID_HEADER);
259 User modifier = new User();
260 modifier.setUserId(userId);
261 log.debug("modifier id is {}", userId);
263 Response response = null;
266 ResourceBusinessLogic businessLogic = getResourceBL(context);
267 ResponseFormat actionResponse = businessLogic.deleteResourceByNameAndVersion(resourceName, version, modifier);
269 if (actionResponse.getStatus() != HttpStatus.SC_NO_CONTENT) {
270 log.debug("failed to delete resource");
271 response = buildErrorResponse(actionResponse);
274 response = buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT), null);
277 } catch (Exception e) {
278 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Delete Resource");
279 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Delete Resource");
280 log.debug("delete resource failed with exception", e);
281 response = buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
288 @Path("/resources/{resourceId}")
289 @Consumes(MediaType.APPLICATION_JSON)
290 @Produces(MediaType.APPLICATION_JSON)
291 @ApiOperation(value = "Retrieve Resource", httpMethod = "GET", notes = "Returns resource according to resourceId", response = Resource.class)
292 @ApiResponses(value = { @ApiResponse(code = 200, message = "Resource found"), @ApiResponse(code = 403, message = "Restricted operation"), @ApiResponse(code = 404, message = "Resource not found") })
293 public Response getResourceById(@PathParam("resourceId") final String resourceId, @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
295 ServletContext context = request.getSession().getServletContext();
297 String url = request.getMethod() + " " + request.getRequestURI();
298 log.debug("Start handle request of {}", url);
301 User modifier = new User();
302 modifier.setUserId(userId);
303 log.debug("modifier id is {}", userId);
305 Response response = null;
308 String resourceIdLower = resourceId.toLowerCase();
309 ResourceBusinessLogic businessLogic = getResourceBL(context);
310 log.trace("get resource with id {}", resourceId);
311 Either<Resource, ResponseFormat> actionResponse = businessLogic.getResource(resourceIdLower, modifier);
313 if (actionResponse.isRight()) {
314 log.debug("failed to get resource");
315 response = buildErrorResponse(actionResponse.right().value());
318 Object resource = RepresentationUtils.toRepresentation(actionResponse.left().value());
319 return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), resource);
321 } catch (Exception e) {
322 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Get Resource");
323 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get Resource");
324 log.debug("get resource failed with exception", e);
325 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
331 @Path("/resources/resourceName/{resourceName}/resourceVersion/{resourceVersion}")
332 @Consumes(MediaType.APPLICATION_JSON)
333 @Produces(MediaType.APPLICATION_JSON)
334 @ApiOperation(value = "Retrieve Resource by name and version", httpMethod = "GET", notes = "Returns resource according to resourceId", response = Resource.class)
335 @ApiResponses(value = { @ApiResponse(code = 200, message = "Resource found"), @ApiResponse(code = 403, message = "Restricted operation"), @ApiResponse(code = 404, message = "Resource not found") })
336 public Response getResourceByNameAndVersion(@PathParam("resourceName") final String resourceName, @PathParam("resourceVersion") final String resourceVersion, @Context final HttpServletRequest request,
337 @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
339 ServletContext context = request.getSession().getServletContext();
341 User modifier = new User();
342 modifier.setUserId(userId);
343 log.debug("modifier id is {}", userId);
344 Response response = null;
346 ResourceBusinessLogic businessLogic = getResourceBL(context);
347 Either<List<Resource>, ResponseFormat> actionResponse = businessLogic.getResourceByNameAndVersion(resourceName, resourceVersion, userId);
348 if (actionResponse.isRight()) {
349 response = buildErrorResponse(actionResponse.right().value());
352 Object resource = RepresentationUtils.toRepresentation(actionResponse.left().value());
353 return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), resource);
355 } catch (Exception e) {
356 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Get Resource by name and version");
357 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get Resource by name and version");
358 log.debug("get resource failed with exception", e);
359 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
365 @Path("/resources/validate-name/{resourceName}")
366 @Consumes(MediaType.APPLICATION_JSON)
367 @Produces(MediaType.APPLICATION_JSON)
368 @ApiOperation(value = "validate resource name", httpMethod = "GET", notes = "checks if the chosen resource name is available ", response = Response.class)
369 @ApiResponses(value = { @ApiResponse(code = 200, message = "Resource found"), @ApiResponse(code = 403, message = "Restricted operation") })
370 public Response validateResourceName(@PathParam("resourceName") final String resourceName, @QueryParam("subtype") String resourceType, @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
371 ServletContext context = request.getSession().getServletContext();
372 String url = request.getMethod() + " " + request.getRequestURI();
373 log.debug("Start handle request of {}", url);
376 User modifier = new User();
377 modifier.setUserId(userId);
378 log.debug("modifier id is {}", userId);
379 Response response = null;
381 ResourceBusinessLogic businessLogic = getResourceBL(context);
383 if (resourceType != null && !ResourceTypeEnum.contains(resourceType)) {
384 log.debug("invalid resource type received");
385 response = buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.INVALID_CONTENT));
389 ResourceTypeEnum typeEnum = null;
390 if (resourceType != null) {
391 typeEnum = ResourceTypeEnum.valueOf(resourceType);
393 Either<Map<String, Boolean>, ResponseFormat> actionResponse = businessLogic.validateResourceNameExists(resourceName, typeEnum, userId);
395 if (actionResponse.isRight()) {
396 log.debug("failed to validate resource name");
397 response = buildErrorResponse(actionResponse.right().value());
400 return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), actionResponse.left().value());
401 } catch (Exception e) {
402 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Validate Resource Name");
403 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Validate Resource Name");
404 log.debug("validate resource name failed with exception", e);
405 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
410 @Path("/resources/certified/abstract")
411 @Consumes(MediaType.APPLICATION_JSON)
412 @Produces(MediaType.APPLICATION_JSON)
413 public Response getCertifiedAbstractResources(@Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
415 // TODO: any validations???
416 ServletContext context = request.getSession().getServletContext();
418 String url = request.getMethod() + " " + request.getRequestURI();
419 log.debug("(get) Start handle request of {}", url);
420 Response response = null;
423 ResourceBusinessLogic businessLogic = getResourceBL(context);
425 Either<List<Resource>, ResponseFormat> actionResponse = businessLogic.getAllCertifiedResources(true, HighestFilterEnum.HIGHEST_ONLY, userId);
427 if (actionResponse.isRight()) {
428 log.debug("failed to get all abstract resources");
429 response = buildErrorResponse(actionResponse.right().value());
432 Object resources = RepresentationUtils.toRepresentation(actionResponse.left().value());
433 response = buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), resources);
436 } catch (Exception e) {
437 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Get Certified Abstract Resources");
438 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get Certified Abstract Resources");
439 log.debug("getCertifiedAbstractResources failed with exception", e);
440 response = buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
447 @Path("/resources/certified/notabstract")
448 @Consumes(MediaType.APPLICATION_JSON)
449 @Produces(MediaType.APPLICATION_JSON)
450 public Response getCertifiedNotAbstractResources(@Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
451 // TODO: any vlidations???
452 ServletContext context = request.getSession().getServletContext();
454 String url = request.getMethod() + " " + request.getRequestURI();
455 log.debug("(get) Start handle request of {}", url);
456 Response response = null;
460 ResourceBusinessLogic businessLogic = getResourceBL(context);
462 Either<List<Resource>, ResponseFormat> actionResponse = businessLogic.getAllCertifiedResources(false, HighestFilterEnum.ALL, userId);
464 if (actionResponse.isRight()) {
465 log.debug("failed to get all non abstract resources");
466 return buildErrorResponse(actionResponse.right().value());
468 Object resources = RepresentationUtils.toRepresentation(actionResponse.left().value());
469 response = buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), resources);
472 } catch (Exception e) {
473 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Get Certified Non Abstract Resources");
474 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get Certified Non Abstract Resources");
475 log.debug("getCertifiedNotAbstractResources failed with exception", e);
476 response = buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
484 @Path("/resources/{resourceId}/metadata")
485 @Consumes(MediaType.APPLICATION_JSON)
486 @Produces(MediaType.APPLICATION_JSON)
487 @ApiOperation(value = "Update Resource Metadata", httpMethod = "PUT", notes = "Returns updated resource metadata", response = Resource.class)
488 @ApiResponses(value = { @ApiResponse(code = 200, message = "Resource metadata updated"), @ApiResponse(code = 403, message = "Restricted operation"), @ApiResponse(code = 400, message = "Invalid content") })
489 public Response updateResourceMetadata(@PathParam("resourceId") final String resourceId, @ApiParam(value = "Resource metadata to be updated", required = true) String data, @Context final HttpServletRequest request,
490 @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
492 ServletContext context = request.getSession().getServletContext();
494 String url = request.getMethod() + " " + request.getRequestURI();
495 log.debug("Start handle request of {}", url);
498 User modifier = new User();
499 modifier.setUserId(userId);
500 log.debug("modifier id is {}", userId);
502 Response response = null;
505 ResourceBusinessLogic businessLogic = getResourceBL(context);
506 String resourceIdLower = resourceId.toLowerCase();
507 Either<Resource, ResponseFormat> updateInfoResource = getComponentsUtils().convertJsonToObjectUsingObjectMapper(data, modifier, Resource.class, AuditingActionEnum.UPDATE_RESOURCE_METADATA, ComponentTypeEnum.RESOURCE);
508 if (updateInfoResource.isRight()) {
509 log.debug("failed to parse resource metadata");
510 response = buildErrorResponse(updateInfoResource.right().value());
513 Either<Resource, ResponseFormat> actionResponse = businessLogic.updateResourceMetadata(resourceIdLower,
514 updateInfoResource.left().value(), null, modifier, false);
516 if (actionResponse.isRight()) {
517 log.debug("failed to update resource metadata");
518 response = buildErrorResponse(actionResponse.right().value());
521 Object resource = RepresentationUtils.toRepresentation(actionResponse.left().value());
522 response = buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), resource);
525 } catch (Exception e) {
526 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Update Resource Metadata");
527 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Update Resource Metadata");
528 log.debug("Update Resource Metadata failed with exception", e);
529 response = buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
536 @Path("/resources/{resourceId}")
537 @Consumes(MediaType.APPLICATION_JSON)
538 @Produces(MediaType.APPLICATION_JSON)
539 @ApiOperation(value = "Update Resource", httpMethod = "PUT", notes = "Returns updated resource", response = Resource.class)
540 @ApiResponses(value = { @ApiResponse(code = 200, message = "Resource updated"), @ApiResponse(code = 403, message = "Restricted operation"), @ApiResponse(code = 400, message = "Invalid content / Missing content"),
541 @ApiResponse(code = 409, message = "Resource already exist") })
542 public Response updateResource(@ApiParam(value = "Resource object to be updated", required = true) String data, @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId,
543 @PathParam(value = "resourceId") String resourceId) {
545 userId = (userId != null) ? userId : request.getHeader(Constants.USER_ID_HEADER);
548 ServletContext context = request.getSession().getServletContext();
550 String url = request.getMethod() + " " + request.getRequestURI();
551 log.debug("Start handle request of {}", url);
554 User modifier = new User();
555 modifier.setUserId(userId);
556 log.debug("modifier id is {}", userId);
558 Response response = null;
561 Wrapper<Response> responseWrapper = new Wrapper<>();
563 if (isUIImport(data)) {
564 performUIImport(responseWrapper, data, request, userId, resourceId);
567 ResourceBusinessLogic businessLogic = getResourceBL(context);
569 Either<Resource, ResponseFormat> convertResponse = parseToLightResource(data, modifier);
570 if (convertResponse.isRight()) {
571 log.debug("failed to parse resource");
572 response = buildErrorResponse(convertResponse.right().value());
576 Resource resource = convertResponse.left().value();
577 Either<Resource, ResponseFormat> actionResponse = businessLogic.validateAndUpdateResourceFromCsar(resource, modifier, null, null, resourceId);
579 if (actionResponse.isRight()) {
580 log.debug("failed to update resource");
581 response = buildErrorResponse(actionResponse.right().value());
583 Object representation = RepresentationUtils.toRepresentation(actionResponse.left().value());
584 response = buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), representation);
586 responseWrapper.setInnerElement(response);
589 return responseWrapper.getInnerElement();
591 } catch (Exception e) {
592 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Update Resource");
593 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Update Resource");
594 log.debug("update resource failed with exception", e);
595 response = buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
604 * @Path("/resources/latestversion/notabstract")
606 * @Consumes(MediaType.APPLICATION_JSON)
608 * @Produces(MediaType.APPLICATION_JSON) public Response getLatestVersionNotAbstractResources(@Context final HttpServletRequest request) { //TODO: any vlidations??? ServletContext context = request.getSession().getServletContext();
610 * String url = request.getMethod() + " " + request.getRequestURI(); log.debug("(get) Start handle request of {}", url); Response response=null;
614 * ResourceBusinessLogic businessLogic = getResourceBL(context);
616 * Either<List<Resource>, ResponseFormat> actionResponse = businessLogic.getLatestVersionResources(false, HighestFilterEnum.HIGHEST_ONLY);
619 * if (actionResponse.isRight()){ log.debug( "failed to get all non abstract resources"); return buildErrorResponse(actionResponse.right().value()); } return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK),
620 * actionResponse.left().value());
622 * } catch (Exception e){ BeEcompErrorManager.getInstance().processEcompError(EcompErrorName. BeRestApiGeneralError, "Get Certified Non Abstract Resources"); log.debug("getCertifiedNotAbstractResources failed with exception", e); response =
623 * buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus. GENERAL_ERROR)); return response;
627 public static List<PropertyDefinition> convertMapToList(Map<String, PropertyDefinition> properties) {
628 if (properties == null) {
632 List<PropertyDefinition> definitions = new ArrayList<>();
633 for (Entry<String, PropertyDefinition> entry : properties.entrySet()) {
634 String name = entry.getKey();
635 PropertyDefinition propertyDefinition = entry.getValue();
636 propertyDefinition.setName(name);
637 definitions.add(propertyDefinition);
644 @Path("/resources/csar/{csaruuid}")
645 @Consumes(MediaType.APPLICATION_JSON)
646 @Produces(MediaType.APPLICATION_JSON)
647 @ApiOperation(value = "Create Resource", httpMethod = "POST", notes = "Returns resource created from csar uuid", response = Resource.class)
648 @ApiResponses(value = { @ApiResponse(code = 201, message = "Resource retrieced"), @ApiResponse(code = 403, message = "Restricted operation"), @ApiResponse(code = 400, message = "Invalid content / Missing content") })
649 public Response getResourceFromCsar(@Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId, @PathParam(value = "csaruuid") String csarUUID) {
653 ServletContext context = request.getSession().getServletContext();
655 String url = request.getMethod() + " " + request.getRequestURI();
656 log.debug("Start handle request of {}", url);
658 // retrieve user details
659 userId = (userId != null) ? userId : request.getHeader(Constants.USER_ID_HEADER);
660 User user = new User();
661 user.setUserId(userId);
663 log.debug("user id is {}", userId);
665 Response response = null;
669 ResourceBusinessLogic businessLogic = getResourceBL(context);
671 Either<Resource, ResponseFormat> eitherResource = businessLogic.getLatestResourceFromCsarUuid(csarUUID, user);
674 if (eitherResource.isRight()) {
675 log.debug("failed to get resource from csarUuid : {}", csarUUID);
677 // buildErrorResponse(eitherResource.right().value());
678 response = buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), eitherResource.right().value());
680 Object representation = RepresentationUtils.toRepresentation(eitherResource.left().value());
681 response = buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), representation);
686 } catch (Exception e) {
687 log.debug("get resource by csar failed with exception", e);
688 response = buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));