aboutsummaryrefslogtreecommitdiffstats
path: root/catalog-be/src/main/java/org/openecomp/sdc/be/externalapi/servlet/ExternalRefsServlet.java
diff options
context:
space:
mode:
Diffstat (limited to 'catalog-be/src/main/java/org/openecomp/sdc/be/externalapi/servlet/ExternalRefsServlet.java')
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/externalapi/servlet/ExternalRefsServlet.java214
1 files changed, 214 insertions, 0 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/externalapi/servlet/ExternalRefsServlet.java b/catalog-be/src/main/java/org/openecomp/sdc/be/externalapi/servlet/ExternalRefsServlet.java
new file mode 100644
index 0000000000..7e48890c7d
--- /dev/null
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/externalapi/servlet/ExternalRefsServlet.java
@@ -0,0 +1,214 @@
+package org.openecomp.sdc.be.externalapi.servlet;
+
+import fj.data.Either;
+import org.openecomp.sdc.be.components.impl.ExternalRefsBusinessLogic;
+import org.openecomp.sdc.be.dao.api.ActionStatus;
+import org.openecomp.sdc.be.dto.ExternalRefDTO;
+import org.openecomp.sdc.be.impl.ComponentsUtils;
+import org.openecomp.sdc.be.model.User;
+import org.openecomp.sdc.be.servlets.AbstractValidationsServlet;
+import org.openecomp.sdc.common.api.Constants;
+import org.openecomp.sdc.common.datastructure.Wrapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Controller;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.*;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import java.util.List;
+import java.util.Map;
+
+
+@Path("/v1/catalog")
+@Controller
+public class ExternalRefsServlet extends AbstractValidationsServlet {
+
+ private static final Logger log = LoggerFactory.getLogger(ExternalRefsServlet.class);
+
+ private ExternalRefsBusinessLogic businessLogic;
+
+ public ExternalRefsServlet(ExternalRefsBusinessLogic businessLogic, ComponentsUtils componentsUtils){
+ this.businessLogic = businessLogic;
+ this.componentsUtils = componentsUtils;
+ }
+
+ @GET
+ @Path("/{assetType}/{uuid}/version/{version}/resourceInstances/{componentInstanceName}/externalReferences/{objectType}")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getComponentInstanceExternalRef(
+ @Context final HttpServletRequest request,
+ @PathParam("assetType") String assetType,
+ @PathParam("uuid") String uuid,
+ @PathParam("version") String version,
+ @PathParam("componentInstanceName") String componentInstanceName,
+ @PathParam("objectType") String objectType, @HeaderParam("USER_ID") String userId) {
+
+ log.debug("GET component instance external interfaces {} {} {} {}", assetType, uuid, componentInstanceName, objectType);
+
+ Response r = authorizeAndValidateRequest(request, userId);
+ if (r != null){
+ return r;
+ }
+
+ Either<List<String>, ActionStatus> refsResult = this.businessLogic.getExternalReferences(uuid, version, componentInstanceName, objectType);
+ if (refsResult.isLeft()){
+ return this.buildOkResponse(refsResult.left().value());
+ } else {
+ return this.buildExtRefErrorResponse(refsResult.right().value(), uuid, version, componentInstanceName, objectType, "");
+ }
+ }
+
+ @GET
+ @Path("/{assetType}/{uuid}/version/{version}/externalReferences/{objectType}")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Map<String, List<String>> getAssetExternalRefByObjectType(
+ @Context final HttpServletRequest request,
+ @PathParam("assetType") String assetType,
+ @PathParam("uuid") String uuid,
+ @PathParam("version") String version,
+ @PathParam("objectType") String objectType, @HeaderParam("USER_ID") String userId) {
+
+ log.debug("GET asset external references {} {} {}", assetType, uuid, objectType);
+
+ Response r = authorizeAndValidateRequest(request, userId);
+ if (r != null){
+ throw new WebApplicationException(r);
+ }
+
+ Either<Map<String, List<String>>, ActionStatus> refsResult = this.businessLogic.getExternalReferences(uuid, version, objectType);
+ if (refsResult.isLeft()){
+ return refsResult.left().value();
+ } else {
+ throw new WebApplicationException(this.buildExtRefErrorResponse(refsResult.right().value(), uuid, version, "", objectType, ""));
+ }
+ }
+
+ @POST
+ @Path("/{assetType}/{uuid}/resourceInstances/{componentInstanceName}/externalReferences/{objectType}")
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response addComponentInstanceExternalRef(
+ @Context final HttpServletRequest request,
+ @PathParam("assetType") String assetType,
+ @PathParam("uuid") String uuid,
+ @PathParam("componentInstanceName") String componentInstanceName,
+ @PathParam("objectType") String objectType, ExternalRefDTO ref, @HeaderParam("USER_ID") String userId) {
+
+ log.debug("POST component instance external interfaces {} {} {} {} {}", assetType, uuid, componentInstanceName, objectType, ref);
+
+ Response r = authorizeAndValidateRequest(request, userId);
+ if (r != null){
+ return r;
+ }
+
+ Either<String, ActionStatus> addResult = this.businessLogic.addExternalReference(uuid, componentInstanceName, objectType, ref);
+ if (addResult.isLeft()) {
+ return Response.status(Response.Status.CREATED)
+ .entity(ref)
+ .build();
+ } else {
+ return this.buildExtRefErrorResponse(addResult.right().value(), uuid, "", componentInstanceName, objectType, ref.getReferenceUUID());
+ }
+
+ }
+
+ @DELETE
+ @Path("/{assetType}/{uuid}/resourceInstances/{componentInstanceName}/externalReferences/{objectType}/{reference}")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response deleteComponentInstanceReference(
+ @Context final HttpServletRequest request,
+ @PathParam("assetType") String assetType,
+ @PathParam("uuid") String uuid,
+ @PathParam("componentInstanceName") String componentInstanceName,
+ @PathParam("objectType") String objectType,
+ @PathParam("reference") String reference, @HeaderParam("USER_ID") String userId) {
+
+ log.debug("DELETE component instance external interfaces {} {} {} {}", assetType, uuid, componentInstanceName, objectType);
+
+ Response r = authorizeAndValidateRequest(request, userId);
+ if (r != null){
+ return r;
+ }
+
+ Either<String, ActionStatus> deleteStatus = this.businessLogic.deleteExternalReference(uuid, componentInstanceName, objectType, reference);
+ if (deleteStatus.isLeft()){
+ return this.buildOkResponse(new ExternalRefDTO(reference));
+ } else {
+ return this.buildExtRefErrorResponse(deleteStatus.right().value(), uuid, "", componentInstanceName, objectType, reference);
+ }
+ }
+
+ @PUT
+ @Path("/{assetType}/{uuid}/resourceInstances/{componentInstanceName}/externalReferences/{objectType}/{oldRefValue}")
+ @Produces(MediaType.APPLICATION_JSON)
+ @Consumes(MediaType.APPLICATION_JSON)
+ public Response updateComponentInstanceReference(
+ @Context final HttpServletRequest request,
+ @PathParam("assetType") String assetType,
+ @PathParam("uuid") String uuid,
+ @PathParam("componentInstanceName") String componentInstanceName,
+ @PathParam("objectType") String objectType,
+ @PathParam("oldRefValue") String oldRefValue,
+ ExternalRefDTO newRefValueDTO, @HeaderParam("USER_ID") String userId) {
+
+ log.debug("PUT component instance external interfaces {} {} {} {}", assetType, uuid, componentInstanceName, objectType);
+
+ Response r = authorizeAndValidateRequest(request, userId);
+ if (r != null){
+ return r;
+ }
+
+ String newRefValue = newRefValueDTO.getReferenceUUID();
+ Either<String, ActionStatus> updateResult = this.businessLogic.updateExternalReference(uuid, componentInstanceName, objectType, oldRefValue, newRefValue);
+ if (updateResult.isLeft()){
+ return this.buildOkResponse(new ExternalRefDTO(newRefValue));
+ } else {
+ return this.buildExtRefErrorResponse(updateResult.right().value(), uuid, "", componentInstanceName, objectType, oldRefValue);
+ }
+
+ }
+
+ private Response authorizeAndValidateRequest(final HttpServletRequest request, String userId) {
+ init(log);
+
+ Wrapper<Response> responseWrapper = new Wrapper<>();
+ Wrapper<User> userWrapper = new Wrapper<>();
+
+ //Validate X-ECOMP_INSTANCE_ID_HEADER
+ if (request.getHeader(Constants.X_ECOMP_INSTANCE_ID_HEADER) == null || request.getHeader(Constants.X_ECOMP_INSTANCE_ID_HEADER).isEmpty()){
+ return this.buildExtRefErrorResponse(ActionStatus.MISSING_X_ECOMP_INSTANCE_ID, "", "", "", "", "");
+ }
+
+ String method = request.getMethod();
+ if (responseWrapper.isEmpty() && !"GET".equals(method)) {
+ validateUserExist(responseWrapper, userWrapper, userId);
+ validateUserRole(responseWrapper, userWrapper.getInnerElement());
+ }
+
+ return responseWrapper.getInnerElement();
+ }
+
+ private Response buildExtRefErrorResponse(ActionStatus status, String uuid, String version, String componentInstanceName, String objectType, String ref){
+ switch (status) {
+ case RESOURCE_NOT_FOUND:
+ return buildErrorResponse(componentsUtils.getResponseFormat(status, uuid));
+ case COMPONENT_VERSION_NOT_FOUND:
+ return buildErrorResponse(componentsUtils.getResponseFormat(status, uuid, version));
+ case COMPONENT_INSTANCE_NOT_FOUND:
+ return buildErrorResponse(componentsUtils.getResponseFormat(status, componentInstanceName, uuid));
+ case EXT_REF_ALREADY_EXIST:
+ return Response.status(Response.Status.OK)
+ .entity(new ExternalRefDTO(ref))
+ .build();
+ case EXT_REF_NOT_FOUND:
+ return buildErrorResponse(componentsUtils.getResponseFormat(status, objectType + "/" + ref));
+ case MISSING_X_ECOMP_INSTANCE_ID:
+ return buildErrorResponse(componentsUtils.getResponseFormat(status));
+ default:
+ return this.buildGeneralErrorResponse();
+ }
+ }
+}