-/*-\r
- * ============LICENSE_START=======================================================\r
- * SDC\r
- * ================================================================================\r
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.\r
- * ================================================================================\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- * \r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- * \r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- * ============LICENSE_END=========================================================\r
- */\r
-\r
-package org.openecomp.sdc.be.servlets;\r
-\r
-import java.util.ArrayList;\r
-import java.util.HashMap;\r
-import java.util.List;\r
-import java.util.Map;\r
-import javax.inject.Inject;\r
-import javax.inject.Singleton;\r
-import javax.servlet.http.HttpServletRequest;\r
-import javax.ws.rs.Consumes;\r
-import javax.ws.rs.DELETE;\r
-import javax.ws.rs.GET;\r
-import javax.ws.rs.HeaderParam;\r
-import javax.ws.rs.POST;\r
-import javax.ws.rs.Path;\r
-import javax.ws.rs.PathParam;\r
-import javax.ws.rs.Produces;\r
-import javax.ws.rs.QueryParam;\r
-import javax.ws.rs.core.Context;\r
-import javax.ws.rs.core.MediaType;\r
-import javax.ws.rs.core.Response;\r
-import org.openecomp.sdc.be.components.impl.ElementBusinessLogic;\r
-import org.openecomp.sdc.be.components.scheduledtasks.ComponentsCleanBusinessLogic;\r
-import org.openecomp.sdc.be.config.BeEcompErrorManager;\r
-import org.openecomp.sdc.be.config.ConfigurationManager;\r
-import org.openecomp.sdc.be.dao.api.ActionStatus;\r
-import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;\r
-import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;\r
-import org.openecomp.sdc.be.datatypes.enums.OriginTypeEnum;\r
-import org.openecomp.sdc.be.impl.ComponentsUtils;\r
-import org.openecomp.sdc.be.info.ArtifactTypesInfo;\r
-import org.openecomp.sdc.be.model.ArtifactType;\r
-import org.openecomp.sdc.be.model.Category;\r
-import org.openecomp.sdc.be.model.Component;\r
-import org.openecomp.sdc.be.model.PropertyScope;\r
-import org.openecomp.sdc.be.model.Tag;\r
-import org.openecomp.sdc.be.model.User;\r
-import org.openecomp.sdc.be.model.catalog.CatalogComponent;\r
-import org.openecomp.sdc.be.model.category.CategoryDefinition;\r
-import org.openecomp.sdc.be.model.category.GroupingDefinition;\r
-import org.openecomp.sdc.be.model.category.SubCategoryDefinition;\r
-import org.openecomp.sdc.be.ui.model.UiCategories;\r
-import org.openecomp.sdc.be.user.UserBusinessLogic;\r
-import org.openecomp.sdc.common.api.Constants;\r
-import org.openecomp.sdc.common.log.wrappers.Logger;\r
-import org.openecomp.sdc.exception.ResponseFormat;\r
-import com.jcabi.aspects.Loggable;\r
-import fj.data.Either;\r
-import io.swagger.v3.oas.annotations.OpenAPIDefinition;\r
-import io.swagger.v3.oas.annotations.Operation;\r
-import io.swagger.v3.oas.annotations.Parameter;\r
-import io.swagger.v3.oas.annotations.info.Info;\r
-import io.swagger.v3.oas.annotations.media.ArraySchema;\r
-import io.swagger.v3.oas.annotations.media.Content;\r
-import io.swagger.v3.oas.annotations.media.Schema;\r
-import io.swagger.v3.oas.annotations.responses.ApiResponse;\r
-import io.swagger.v3.oas.annotations.responses.ApiResponses;\r
-\r
-@Path("/v1/")\r
-\r
-/****\r
- * \r
- * UI oriented servlet - to return elements in specific format UI needs\r
- * \r
- *\r
- */\r
-@Loggable(prepend = true, value = Loggable.DEBUG, trim = false)\r
-@OpenAPIDefinition(info = @Info(title = "Element Servlet",description = "Element Servlet"))\r
-@Singleton\r
-public class ElementServlet extends BeGenericServlet {\r
-\r
- private static final Logger log = Logger.getLogger(ElementServlet.class);\r
- private final ComponentsCleanBusinessLogic componentsCleanBusinessLogic;\r
- private final ElementBusinessLogic elementBusinessLogic;\r
- private final UserBusinessLogic userBusinessLogic;\r
-\r
- @Inject\r
- public ElementServlet(UserBusinessLogic userBusinessLogic,\r
- ComponentsUtils componentsUtils,\r
- ComponentsCleanBusinessLogic componentsCleanBusinessLogic,\r
- ElementBusinessLogic elementBusinessLogic) {\r
- super(userBusinessLogic, componentsUtils);\r
- this.componentsCleanBusinessLogic = componentsCleanBusinessLogic;\r
- this.elementBusinessLogic = elementBusinessLogic;\r
- this.userBusinessLogic = userBusinessLogic;\r
- }\r
-\r
- /*\r
- ******************************************************************************\r
- * NEW CATEGORIES category / \ subcategory subcategory / grouping\r
- ******************************************************************************/\r
-\r
- /*\r
- *\r
- *\r
- * CATEGORIES\r
- */\r
- /////////////////////////////////////////////////////////////////////////////////////////////////////\r
- // retrieve all component categories\r
- @GET\r
- @Path("/categories/{componentType}")\r
- @Consumes(MediaType.APPLICATION_JSON)\r
- @Produces(MediaType.APPLICATION_JSON)\r
- @Operation(description = "Retrieve the list of all resource/service/product categories/sub-categories/groupings",\r
- method = "GET",\r
- summary = "Retrieve the list of all resource/service/product categories/sub-categories/groupings.",\r
- responses = @ApiResponse(\r
- content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))\r
- @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Returns categories Ok"),\r
- @ApiResponse(responseCode = "403", description = "Missing information"),\r
- @ApiResponse(responseCode = "400", description = "Invalid component type"),\r
- @ApiResponse(responseCode = "409", description = "Restricted operation"),\r
- @ApiResponse(responseCode = "500", description = "Internal Server Error")})\r
- public Response getComponentCategories(\r
- @Parameter(description = "allowed values are resources / services/ products", schema = @Schema(allowableValues = {ComponentTypeEnum.RESOURCE_PARAM_NAME ,\r
- ComponentTypeEnum.SERVICE_PARAM_NAME,ComponentTypeEnum.PRODUCT_PARAM_NAME}),required = true)\r
- @PathParam(value = "componentType") final String componentType,\r
- @HeaderParam(value = Constants.USER_ID_HEADER) String userId, @Context final HttpServletRequest request) {\r
-\r
- try {\r
- Either<List<CategoryDefinition>, ResponseFormat> either =\r
- elementBusinessLogic.getAllCategories(componentType, userId);\r
- if (either.isRight()) {\r
- log.debug("No categories were found for type {}", componentType);\r
- return buildErrorResponse(either.right().value());\r
- } else {\r
- return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), either.left().value());\r
- }\r
- } catch (Exception e) {\r
- BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get Component Categories");\r
- log.debug("getComponentCategories failed with exception", e);\r
- return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));\r
- }\r
- }\r
-\r
- @GET\r
- @Path("/categories")\r
- @Consumes(MediaType.APPLICATION_JSON)\r
- @Produces(MediaType.APPLICATION_JSON)\r
- @Operation(description = "Retrieve the all resource, service and product categories", method = "GET",\r
- summary = "Retrieve the all resource, service and product categories", responses = @ApiResponse(\r
- content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))\r
- @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Returns categories Ok"),\r
- @ApiResponse(responseCode = "403", description = "Missing information"),\r
- @ApiResponse(responseCode = "409", description = "Restricted operation"),\r
- @ApiResponse(responseCode = "500", description = "Internal Server Error")})\r
- public Response getAllCategories(@Context final HttpServletRequest request,\r
- @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {\r
-\r
- try {\r
- Either<UiCategories, ResponseFormat> either = elementBusinessLogic.getAllCategories(userId);\r
- if (either.isRight()) {\r
- log.debug("No categories were found");\r
- return buildErrorResponse(either.right().value());\r
- } else {\r
- return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), either.left().value());\r
- }\r
- } catch (Exception e) {\r
- BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get All Categories");\r
- log.debug("getAllCategories failed with exception", e);\r
- return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));\r
- }\r
- }\r
-\r
-\r
- @POST\r
- @Path("/category/{componentType}")\r
- @Consumes(MediaType.APPLICATION_JSON)\r
- @Produces(MediaType.APPLICATION_JSON)\r
- @Operation(description = "Create new component category", method = "POST",\r
- summary = "Create new component category")\r
- @ApiResponses(value = {@ApiResponse(responseCode = "201", description = "Category created"),\r
- @ApiResponse(responseCode = "400", description = "Invalid category data"),\r
- @ApiResponse(responseCode = "403", description = "USER_ID header is missing"),\r
- @ApiResponse(responseCode = "409",\r
- description = "Category already exists / User not permitted to perform the action"),\r
- @ApiResponse(responseCode = "500", description = "General Error")})\r
- public Response createComponentCategory(\r
- @Parameter(description = "allowed values are resources /services / products",\r
- schema = @Schema(allowableValues = {ComponentTypeEnum.RESOURCE_PARAM_NAME ,\r
- ComponentTypeEnum.SERVICE_PARAM_NAME,ComponentTypeEnum.PRODUCT_PARAM_NAME}),\r
- required = true) @PathParam(value = "componentType") final String componentType,\r
- @Parameter(description = "Category to be created", required = true) String data,\r
- @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {\r
- try {\r
- CategoryDefinition category = RepresentationUtils.fromRepresentation(data, CategoryDefinition.class);\r
-\r
- Either<CategoryDefinition, ResponseFormat> createResourceCategory =\r
- elementBusinessLogic.createCategory(category, componentType, userId);\r
- if (createResourceCategory.isRight()) {\r
- return buildErrorResponse(createResourceCategory.right().value());\r
- }\r
-\r
- ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.CREATED);\r
- return buildOkResponse(responseFormat, createResourceCategory.left().value());\r
-\r
- } catch (Exception e) {\r
- BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Create resource category");\r
- log.debug("createResourceCategory failed with exception", e);\r
- return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));\r
-\r
- }\r
- }\r
-\r
- @DELETE\r
- @Path("/category/{componentType}/{categoryUniqueId}")\r
- @Consumes(MediaType.APPLICATION_JSON)\r
- @Produces(MediaType.APPLICATION_JSON)\r
- @Operation(description = "Delete component category", method = "DELETE", summary = "Delete component category",\r
- responses = @ApiResponse(\r
- content = @Content(array = @ArraySchema(schema = @Schema(implementation = Category.class)))))\r
- @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "Category deleted"),\r
- @ApiResponse(responseCode = "403", description = "USER_ID header is missing"),\r
- @ApiResponse(responseCode = "409", description = "User not permitted to perform the action"),\r
- @ApiResponse(responseCode = "404", description = "Category not found"),\r
- @ApiResponse(responseCode = "500", description = "General Error")})\r
- public Response deleteComponentCategory(@PathParam(value = "categoryUniqueId") final String categoryUniqueId,\r
- @PathParam(value = "componentType") final String componentType, @Context final HttpServletRequest request,\r
- @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {\r
-\r
- try {\r
- Either<CategoryDefinition, ResponseFormat> createResourceCategory =\r
- elementBusinessLogic.deleteCategory(categoryUniqueId, componentType, userId);\r
-\r
- if (createResourceCategory.isRight()) {\r
- return buildErrorResponse(createResourceCategory.right().value());\r
- }\r
- ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT);\r
- return buildOkResponse(responseFormat, null);\r
-\r
- } catch (Exception e) {\r
- BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Create resource category");\r
- log.debug("createResourceCategory failed with exception", e);\r
- return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));\r
-\r
- }\r
- }\r
-\r
- /*\r
- *\r
- *\r
- * SUBCATEGORIES\r
- *\r
- */\r
-\r
- @POST\r
- @Path("/category/{componentType}/{categoryId}/subCategory")\r
- @Consumes(MediaType.APPLICATION_JSON)\r
- @Produces(MediaType.APPLICATION_JSON)\r
- @Operation(description = "Create new component sub-category", method = "POST",\r
- summary = "Create new component sub-category for existing category")\r
- @ApiResponses(value = {@ApiResponse(responseCode = "201", description = "Subcategory created"),\r
- @ApiResponse(responseCode = "400", description = "Invalid subcategory data"),\r
- @ApiResponse(responseCode = "403", description = "USER_ID header is missing"),\r
- @ApiResponse(responseCode = "404", description = "Parent category wasn't found"),\r
- @ApiResponse(responseCode = "409",\r
- description = "Subcategory already exists / User not permitted to perform the action"),\r
- @ApiResponse(responseCode = "500", description = "General Error")})\r
- public Response createComponentSubCategory(\r
- @Parameter(description = "allowed values are resources / products",\r
- schema = @Schema(allowableValues = {ComponentTypeEnum.RESOURCE_PARAM_NAME ,\r
- ComponentTypeEnum.PRODUCT_PARAM_NAME}),\r
- required = true) @PathParam(value = "componentType") final String componentType,\r
- @Parameter(description = "Parent category unique ID",\r
- required = true) @PathParam(value = "categoryId") final String categoryId,\r
- @Parameter(description = "Subcategory to be created. \ne.g. {\"name\":\"Resource-subcat\"}",\r
- required = true) String data,\r
- @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {\r
-\r
- try {\r
- SubCategoryDefinition subCategory =\r
- RepresentationUtils.fromRepresentation(data, SubCategoryDefinition.class);\r
-\r
- Either<SubCategoryDefinition, ResponseFormat> createSubcategory =\r
- elementBusinessLogic.createSubCategory(subCategory, componentType, categoryId, userId);\r
- if (createSubcategory.isRight()) {\r
- return buildErrorResponse(createSubcategory.right().value());\r
- }\r
- ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.CREATED);\r
- return buildOkResponse(responseFormat, createSubcategory.left().value());\r
-\r
- } catch (Exception e) {\r
- BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Create sub-category");\r
- log.debug("createComponentSubCategory failed with exception", e);\r
- return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));\r
-\r
- }\r
- }\r
-\r
- @DELETE\r
- @Path("/category/{componentType}/{categoryUniqueId}/subCategory/{subCategoryUniqueId}")\r
- @Consumes(MediaType.APPLICATION_JSON)\r
- @Produces(MediaType.APPLICATION_JSON)\r
- @Operation(description = "Delete component category", method = "DELETE", summary = "Delete component category",\r
- responses = @ApiResponse(\r
- content = @Content(array = @ArraySchema(schema = @Schema(implementation = Category.class)))))\r
- @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "Category deleted"),\r
- @ApiResponse(responseCode = "403", description = "USER_ID header is missing"),\r
- @ApiResponse(responseCode = "409", description = "User not permitted to perform the action"),\r
- @ApiResponse(responseCode = "404", description = "Category not found"),\r
- @ApiResponse(responseCode = "500", description = "General Error")})\r
- public Response deleteComponentSubCategory(@PathParam(value = "categoryUniqueId") final String categoryUniqueId,\r
- @PathParam(value = "subCategoryUniqueId") final String subCategoryUniqueId,\r
- @PathParam(value = "componentType") final String componentType, @Context final HttpServletRequest request,\r
- @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {\r
-\r
- try {\r
- Either<SubCategoryDefinition, ResponseFormat> deleteSubResourceCategory =\r
- elementBusinessLogic.deleteSubCategory(subCategoryUniqueId, componentType, userId);\r
- if (deleteSubResourceCategory.isRight()) {\r
- return buildErrorResponse(deleteSubResourceCategory.right().value());\r
- }\r
- ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT);\r
- return buildOkResponse(responseFormat, null);\r
-\r
- } catch (Exception e) {\r
- BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Delete component category");\r
- log.debug("deleteComponentSubCategory failed with exception", e);\r
- return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));\r
-\r
- }\r
- }\r
-\r
- /*\r
- * GROUPINGS\r
- */\r
- @POST\r
- @Path("/category/{componentType}/{categoryId}/subCategory/{subCategoryId}/grouping")\r
- @Consumes(MediaType.APPLICATION_JSON)\r
- @Produces(MediaType.APPLICATION_JSON)\r
- @Operation(description = "Create new component grouping", method = "POST",\r
- summary = "Create new component grouping for existing sub-category")\r
- @ApiResponses(value = {@ApiResponse(responseCode = "201", description = "Grouping created"),\r
- @ApiResponse(responseCode = "400", description = "Invalid grouping data"),\r
- @ApiResponse(responseCode = "403", description = "USER_ID header is missing"),\r
- @ApiResponse(responseCode = "404", description = "Parent category or subcategory were not found"),\r
- @ApiResponse(responseCode = "409",\r
- description = "Grouping already exists / User not permitted to perform the action"),\r
- @ApiResponse(responseCode = "500", description = "General Error")})\r
- public Response createComponentGrouping(\r
- @Parameter(description = "allowed values are products",\r
- schema = @Schema(allowableValues = {ComponentTypeEnum.PRODUCT_PARAM_NAME}),\r
- required = true) @PathParam(value = "componentType") final String componentType,\r
- @Parameter(description = "Parent category unique ID",\r
- required = true) @PathParam(value = "categoryId") final String grandParentCategoryId,\r
- @Parameter(description = "Parent sub-category unique ID",\r
- required = true) @PathParam(value = "subCategoryId") final String parentSubCategoryId,\r
- @Parameter(description = "Subcategory to be created", required = true) String data,\r
- @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {\r
- try {\r
- GroupingDefinition grouping = RepresentationUtils.fromRepresentation(data, GroupingDefinition.class);\r
-\r
- Either<GroupingDefinition, ResponseFormat> createGrouping = elementBusinessLogic.createGrouping(grouping,\r
- componentType, grandParentCategoryId, parentSubCategoryId, userId);\r
- if (createGrouping.isRight()) {\r
- return buildErrorResponse(createGrouping.right().value());\r
- }\r
- ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.CREATED);\r
- return buildOkResponse(responseFormat, createGrouping.left().value());\r
-\r
- } catch (Exception e) {\r
- BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Create grouping");\r
- log.debug("createComponentGrouping failed with exception", e);\r
- return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));\r
-\r
- }\r
- }\r
-\r
- @DELETE\r
- @Path("/category/{componentType}/{categoryUniqueId}/subCategory/{subCategoryUniqueId}/grouping/{groupingUniqueId}")\r
- @Consumes(MediaType.APPLICATION_JSON)\r
- @Produces(MediaType.APPLICATION_JSON)\r
- @Operation(description = "Delete component category", method = "DELETE", summary = "Delete component category",\r
- responses = @ApiResponse(\r
- content = @Content(array = @ArraySchema(schema = @Schema(implementation = Category.class)))))\r
- @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "Category deleted"),\r
- @ApiResponse(responseCode = "403", description = "USER_ID header is missing"),\r
- @ApiResponse(responseCode = "409", description = "User not permitted to perform the action"),\r
- @ApiResponse(responseCode = "404", description = "Category not found"),\r
- @ApiResponse(responseCode = "500", description = "General Error")})\r
- public Response deleteComponentGrouping(\r
- @PathParam(value = "categoryUniqueId") final String grandParentCategoryUniqueId,\r
- @PathParam(value = "subCategoryUniqueId") final String parentSubCategoryUniqueId,\r
- @PathParam(value = "groupingUniqueId") final String groupingUniqueId,\r
- @PathParam(value = "componentType") final String componentType, @Context final HttpServletRequest request,\r
- @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {\r
-\r
- try {\r
- Either<GroupingDefinition, ResponseFormat> deleteGrouping =\r
- elementBusinessLogic.deleteGrouping(groupingUniqueId, componentType, userId);\r
- if (deleteGrouping.isRight()) {\r
- return buildErrorResponse(deleteGrouping.right().value());\r
- }\r
- ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT);\r
- return buildOkResponse(responseFormat, null);\r
-\r
- } catch (Exception e) {\r
- BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Delete component grouping");\r
- log.debug("deleteGrouping failed with exception", e);\r
- return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));\r
-\r
- }\r
- }\r
-\r
- /////////////////////////////////////////////////////////////////////////////////////////////////////\r
- // retrieve all tags\r
- @GET\r
- @Path("/tags")\r
- @Consumes(MediaType.APPLICATION_JSON)\r
- @Produces(MediaType.APPLICATION_JSON)\r
- @Operation(description = "Retrieve all tags", method = "GET", summary = "Retrieve all tags",responses = @ApiResponse(\r
- content = @Content(array = @ArraySchema(schema = @Schema(implementation = User.class)))))\r
- @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Returns tags Ok"),\r
- @ApiResponse(responseCode = "404", description = "No tags were found"),\r
- @ApiResponse(responseCode = "500", description = "Internal Server Error")})\r
- public Response getTags(@Context final HttpServletRequest request,\r
- @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {\r
- String url = request.getMethod() + " " + request.getRequestURI();\r
- log.debug("(getTags) Start handle request of {}", url);\r
-\r
- try {\r
- Either<List<Tag>, ActionStatus> either = elementBusinessLogic.getAllTags(userId);\r
- if (either.isRight() || either.left().value() == null) {\r
- log.debug("No tags were found");\r
- return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT));\r
- } else {\r
- return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), either.left().value());\r
- }\r
- } catch (Exception e) {\r
- BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get All Tags");\r
- log.debug("getAllTags failed with exception", e);\r
- return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));\r
- }\r
- }\r
-\r
- /////////////////////////////////////////////////////////////////////////////////////////////////////\r
- // retrieve all property scopes\r
- @GET\r
- @Path("/propertyScopes")\r
- @Consumes(MediaType.APPLICATION_JSON)\r
- @Produces(MediaType.APPLICATION_JSON)\r
- @Operation(description = "Retrieve all propertyScopes", method = "GET", summary = "Retrieve all propertyScopes",\r
- responses = @ApiResponse(\r
- content = @Content(array = @ArraySchema(schema = @Schema(implementation = User.class)))))\r
- @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Returns propertyScopes Ok"),\r
- @ApiResponse(responseCode = "404", description = "No propertyScopes were found"),\r
- @ApiResponse(responseCode = "500", description = "Internal Server Error")})\r
- public Response getPropertyScopes(@Context final HttpServletRequest request,\r
- @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {\r
- String url = request.getMethod() + " " + request.getRequestURI();\r
- log.debug("(getPropertyScopes) Start handle request of {}", url);\r
-\r
- try {\r
- Either<List<PropertyScope>, ActionStatus> either = elementBusinessLogic.getAllPropertyScopes(userId);\r
- if (either.isRight() || either.left().value() == null) {\r
- log.debug("No property scopes were found");\r
- return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT));\r
- } else {\r
- return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), either.left().value());\r
- }\r
- } catch (Exception e) {\r
- BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get Property Scopes Categories");\r
- log.debug("getPropertyScopes failed with exception", e);\r
- return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));\r
- }\r
- }\r
-\r
- /////////////////////////////////////////////////////////////////////////////////////////////////////\r
- // retrieve all artifact types\r
- @GET\r
- @Path("/artifactTypes")\r
- @Consumes(MediaType.APPLICATION_JSON)\r
- @Produces(MediaType.APPLICATION_JSON)\r
- @Operation(description = "Retrieve all artifactTypes", method = "GET", summary = "Retrieve all artifactTypes",\r
- responses = @ApiResponse(\r
- content = @Content(array = @ArraySchema(schema = @Schema(implementation = User.class)))))\r
- @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Returns artifactTypes Ok"),\r
- @ApiResponse(responseCode = "404", description = "No artifactTypes were found"),\r
- @ApiResponse(responseCode = "500", description = "Internal Server Error")})\r
- public Response getArtifactTypes(@Context final HttpServletRequest request,\r
- @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {\r
- String url = request.getMethod() + " " + request.getRequestURI();\r
- log.debug("(GET - getArtifactTypes) Start handle request of {}", url);\r
-\r
- try {\r
- Either<List<ArtifactType>, ActionStatus> either = elementBusinessLogic.getAllArtifactTypes(userId);\r
- if (either.isRight() || either.left().value() == null) {\r
- log.debug("No artifact types were found");\r
- return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT));\r
- } else {\r
-\r
- Integer defaultHeatTimeout = ConfigurationManager.getConfigurationManager().getConfiguration()\r
- .getDefaultHeatArtifactTimeoutMinutes();\r
- ArtifactTypesInfo typesResponse = new ArtifactTypesInfo();\r
- typesResponse.setArtifactTypes(either.left().value());\r
- typesResponse.setHeatDefaultTimeout(defaultHeatTimeout);\r
-\r
- return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), typesResponse);\r
- }\r
- } catch (Exception e) {\r
- BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get Artifact Types");\r
- log.debug("getArtifactTypes failed with exception", e);\r
- return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));\r
- }\r
- }\r
-\r
- /////////////////////////////////////////////////////////////////////////////////////////////////////\r
- // retrieve all artifact types\r
- @GET\r
- @Path("/configuration/ui")\r
- @Consumes(MediaType.APPLICATION_JSON)\r
- @Produces(MediaType.APPLICATION_JSON)\r
- @Operation(description = "Retrieve all artifactTypes", method = "GET", summary = "Retrieve all artifactTypes",\r
- responses = @ApiResponse(\r
- content = @Content(array = @ArraySchema(schema = @Schema(implementation = User.class)))))\r
- @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Returns artifactTypes Ok"),\r
- @ApiResponse(responseCode = "404", description = "No artifactTypes were found"),\r
- @ApiResponse(responseCode = "500", description = "Internal Server Error")})\r
- public Response getConfiguration(@Context final HttpServletRequest request,\r
- @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {\r
- String url = request.getMethod() + " " + request.getRequestURI();\r
- log.debug("(getConfiguration) Start handle request of {}", url);\r
-\r
- try {\r
- Either<List<ArtifactType>, ActionStatus> otherEither = elementBusinessLogic.getAllArtifactTypes(userId);\r
- Either<Integer, ActionStatus> defaultHeatTimeout = elementBusinessLogic.getDefaultHeatTimeout();\r
- Either<Map<String, Object>, ActionStatus> deploymentEither =\r
- elementBusinessLogic.getAllDeploymentArtifactTypes();\r
- Either<Map<String, String>, ActionStatus> resourceTypesMap = elementBusinessLogic.getResourceTypesMap();\r
-\r
- if (otherEither.isRight() || otherEither.left().value() == null) {\r
- log.debug("No other artifact types were found");\r
- return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT));\r
- } else if (deploymentEither.isRight() || deploymentEither.left().value() == null) {\r
- log.debug("No deployment artifact types were found");\r
- return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT));\r
- } else if (defaultHeatTimeout.isRight() || defaultHeatTimeout.left().value() == null) {\r
- log.debug("heat default timeout was not found");\r
- return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT));\r
- } else if (resourceTypesMap.isRight() || resourceTypesMap.left().value() == null) {\r
- log.debug("No resource types were found");\r
- return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT));\r
- } else {\r
- Map<String, Object> artifacts = new HashMap<>();\r
- Map<String, Object> configuration = new HashMap<>();\r
-\r
- artifacts.put("other", otherEither.left().value());\r
- artifacts.put("deployment", deploymentEither.left().value());\r
- configuration.put("artifacts", artifacts);\r
- configuration.put("defaultHeatTimeout", defaultHeatTimeout.left().value());\r
- configuration.put("componentTypes", elementBusinessLogic.getAllComponentTypesParamNames());\r
- configuration.put("roles", elementBusinessLogic.getAllSupportedRoles());\r
- configuration.put("resourceTypes", resourceTypesMap.left().value());\r
- configuration.put("environmentContext",\r
- ConfigurationManager.getConfigurationManager().getConfiguration().getEnvironmentContext());\r
- configuration.put("gab",\r
- ConfigurationManager.getConfigurationManager().getConfiguration().getGabConfig());\r
-\r
- return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), configuration);\r
- }\r
-\r
- } catch (Exception e) {\r
- BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get Artifact Types");\r
- log.debug("getArtifactTypes failed with exception", e);\r
- return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));\r
- }\r
- }\r
-\r
- /////////////////////////////////////////////////////////////////////////////////////////////////////\r
- // retrieve all followed resources and services\r
- @GET\r
- @Path("/followed")\r
- @Consumes(MediaType.APPLICATION_JSON)\r
- @Produces(MediaType.APPLICATION_JSON)\r
- @Operation(description = "Retrieve all followed", method = "GET", summary = "Retrieve all followed",\r
- responses = @ApiResponse(\r
- content = @Content(array = @ArraySchema(schema = @Schema(implementation = User.class)))))\r
- @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Returns followed Ok"),\r
- @ApiResponse(responseCode = "404", description = "No followed were found"),\r
- @ApiResponse(responseCode = "404", description = "User not found"),\r
- @ApiResponse(responseCode = "500", description = "Internal Server Error")})\r
- public Response getFollowedResourcesServices(@Context final HttpServletRequest request,\r
- @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {\r
-\r
- Response res = null;\r
- User userData = null;\r
- try {\r
- String url = request.getMethod() + " " + request.getRequestURI();\r
- log.debug("Start handle request of {}", url);\r
-\r
- // Getting the user\r
- Either<User, ActionStatus> either = userBusinessLogic.getUser(userId, false);\r
- if (either.isRight()) {\r
- // Couldn't find or otherwise fetch the user\r
- return buildErrorResponse(\r
- getComponentsUtils().getResponseFormatByUserId(either.right().value(), userId));\r
- }\r
-\r
- if (either.left().value() != null) {\r
- userData = either.left().value();\r
- Either<Map<String, List<? extends Component>>, ResponseFormat> followedResourcesServices =\r
- elementBusinessLogic.getFollowed(userData);\r
- if (followedResourcesServices.isRight()) {\r
- log.debug("failed to get followed resources services ");\r
- return buildErrorResponse(followedResourcesServices.right().value());\r
- }\r
- Object data = RepresentationUtils.toRepresentation(followedResourcesServices.left().value());\r
- res = buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), data);\r
- } else {\r
- res = buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));\r
- }\r
- } catch (Exception e) {\r
- BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get Followed Resources / Services Categories");\r
- log.debug("Getting followed resources/services failed with exception", e);\r
- res = buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));\r
- }\r
- return res;\r
- }\r
-\r
- /////////////////////////////////////////////////////////////////////////////////////////////////////\r
- // retrieve all certified resources and services and their last version\r
- @GET\r
- @Path("/screen")\r
- @Consumes(MediaType.APPLICATION_JSON)\r
- @Produces(MediaType.APPLICATION_JSON)\r
- @Operation(description = "Retrieve catalog resources and services", method = "GET",\r
- summary = "Retrieve catalog resources and services", responses = @ApiResponse(\r
- content = @Content(array = @ArraySchema(schema = @Schema(implementation = User.class)))))\r
- @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Returns resources and services Ok"),\r
- @ApiResponse(responseCode = "404", description = "No resources and services were found"),\r
- @ApiResponse(responseCode = "404", description = "User not found"),\r
- @ApiResponse(responseCode = "500", description = "Internal Server Error")})\r
- public Response getCatalogComponents(@Context final HttpServletRequest request,\r
- @HeaderParam(value = Constants.USER_ID_HEADER) String userId,\r
- @QueryParam("excludeTypes") List<OriginTypeEnum> excludeTypes) {\r
-\r
- Response res = null;\r
- try {\r
- String url = request.getMethod() + " " + request.getRequestURI();\r
- log.debug("Start handle request of {}", url);\r
-\r
- Either<Map<String, List<CatalogComponent>>, ResponseFormat> catalogData =\r
- elementBusinessLogic.getCatalogComponents(userId, excludeTypes);\r
-\r
- if (catalogData.isRight()) {\r
- log.debug("failed to get catalog data");\r
- return buildErrorResponse(catalogData.right().value());\r
- }\r
- Object data = RepresentationUtils.toRepresentation(catalogData.left().value());\r
- res = buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), data);\r
-\r
- } catch (Exception e) {\r
- BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get Catalog Components");\r
- log.debug("Getting catalog components failed with exception", e);\r
- res = buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));\r
- }\r
- return res;\r
- }\r
-\r
- @DELETE\r
- @Path("/inactiveComponents/{componentType}")\r
- public Response deleteMarkedResources(@PathParam("componentType") final String componentType, @Context final HttpServletRequest request) {\r
- String url = request.getMethod() + " " + request.getRequestURI();\r
- log.debug("Start handle request of {}", url);\r
-\r
- // get modifier id\r
- String userId = request.getHeader(Constants.USER_ID_HEADER);\r
- User modifier = new User();\r
- modifier.setUserId(userId);\r
- log.debug("modifier id is {}", userId);\r
-\r
- Response response = null;\r
-\r
- NodeTypeEnum nodeType = NodeTypeEnum.getByNameIgnoreCase(componentType);\r
- if (nodeType == null) {\r
- log.info("componentType is not valid: {}", componentType);\r
- return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.INVALID_CONTENT));\r
- }\r
-\r
- List<NodeTypeEnum> componentsList = new ArrayList<>();\r
- componentsList.add(nodeType);\r
- try {\r
- Map<NodeTypeEnum, Either<List<String>, ResponseFormat>> cleanComponentsResult = componentsCleanBusinessLogic.cleanComponents(componentsList);\r
- Either<List<String>, ResponseFormat> cleanResult = cleanComponentsResult.get(nodeType);\r
-\r
- if (cleanResult.isRight()) {\r
- log.debug("failed to delete marked components of type {}", nodeType);\r
- response = buildErrorResponse(cleanResult.right().value());\r
- return response;\r
- }\r
- response = buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), cleanResult.left().value());\r
- return response;\r
-\r
- } catch (Exception e) {\r
- BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Delete Marked Components");\r
- log.debug("delete marked components failed with exception", e);\r
- response = buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));\r
- return response;\r
-\r
- }\r
- }\r
-\r
- @GET\r
- @Path("/ecompPortalMenu")\r
- @Consumes(MediaType.APPLICATION_JSON)\r
- @Produces(MediaType.APPLICATION_JSON)\r
- @Operation(description = "Retrieve ecomp portal menu - MOC", method = "GET", summary = "Retrieve ecomp portal menu", responses = @ApiResponse(\r
- content = @Content(array = @ArraySchema(schema = @Schema(implementation = User.class)))))\r
- @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "Retrieve ecomp portal menu") })\r
- public Response getListOfCsars(@Context final HttpServletRequest request) {\r
- return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK),\r
- "[{\"menuId\":1,\"column\":2,\"text\":\"Design\",\"parentMenuId\":null,\"url\":\"\",\"appid\":null,\"roles\":null,\"children\":[{\"menuId\":11,\"column\":1,\"text\":\"ProductDesign\",\"parentMenuId\":1,\"url\":\"\",\"appid\":null,\"roles\":null},{\"menuId\":12,\"column\":2,\"text\":\"Service\",\"parentMenuId\":1,\"url\":\"\",\"appid\":null,\"roles\":null,\"children\":[{\"menuId\":21,\"column\":1,\"text\":\"ViewPolicies\",\"parentMenuId\":12,\"url\":\"\",\"appid\":null,\"roles\":null,\"children\":[{\"menuId\":90,\"column\":1,\"text\":\"4thLevelApp1aR16\",\"parentMenuId\":21,\"url\":\"http://google.com\",\"appid\":null,\"roles\":null}]},{\"menuId\":22,\"column\":2,\"text\":\"UpdatePolicies\",\"parentMenuId\":12,\"url\":\"\",\"appid\":null,\"roles\":null,\"children\":[{\"menuId\":91,\"column\":1,\"text\":\"4thLevelApp1bR16\",\"parentMenuId\":22,\"url\":\"http://jsonlint.com/\",\"appid\":null,\"roles\":null}]},{\"menuId\":23,\"column\":3,\"text\":\"UpdateRules\",\"parentMenuId\":12,\"url\":\"\",\"appid\":null,\"roles\":null},{\"menuId\":24,\"column\":4,\"text\":\"CreateSignatures?\",\"parentMenuId\":12,\"url\":\"\",\"appid\":null,\"roles\":null},{\"menuId\":25,\"column\":5,\"text\":\"Definedata\",\"parentMenuId\":12,\"url\":\"\",\"appid\":null,\"roles\":null}]}]}]");\r
- }\r
-\r
-}\r
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+package org.openecomp.sdc.be.servlets;
+
+import com.jcabi.aspects.Loggable;
+import fj.data.Either;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.media.ArraySchema;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.servers.Server;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+import javax.inject.Inject;
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import org.openecomp.sdc.be.components.impl.ArtifactsBusinessLogic;
+import org.openecomp.sdc.be.components.impl.ElementBusinessLogic;
+import org.openecomp.sdc.be.components.impl.ModelBusinessLogic;
+import org.openecomp.sdc.be.components.scheduledtasks.ComponentsCleanBusinessLogic;
+import org.openecomp.sdc.be.config.BeEcompErrorManager;
+import org.openecomp.sdc.be.config.Configuration;
+import org.openecomp.sdc.be.config.ConfigurationManager;
+import org.openecomp.sdc.be.dao.api.ActionStatus;
+import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
+import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
+import org.openecomp.sdc.be.datatypes.enums.OriginTypeEnum;
+import org.openecomp.sdc.be.impl.ComponentsUtils;
+import org.openecomp.sdc.be.info.ArtifactTypesInfo;
+import org.openecomp.sdc.be.model.ArtifactType;
+import org.openecomp.sdc.be.model.BaseType;
+import org.openecomp.sdc.be.model.CatalogUpdateTimestamp;
+import org.openecomp.sdc.be.model.Category;
+import org.openecomp.sdc.be.model.Component;
+import org.openecomp.sdc.be.model.PropertyScope;
+import org.openecomp.sdc.be.model.Tag;
+import org.openecomp.sdc.be.model.User;
+import org.openecomp.sdc.be.model.catalog.CatalogComponent;
+import org.openecomp.sdc.be.model.category.CategoryDefinition;
+import org.openecomp.sdc.be.model.category.GroupingDefinition;
+import org.openecomp.sdc.be.model.category.SubCategoryDefinition;
+import org.openecomp.sdc.be.ui.model.UiCategories;
+import org.openecomp.sdc.be.user.UserBusinessLogic;
+import org.openecomp.sdc.common.api.Constants;
+import org.openecomp.sdc.common.log.wrappers.Logger;
+import org.openecomp.sdc.common.util.Multitenancy;
+import org.openecomp.sdc.exception.ResponseFormat;
+import org.springframework.stereotype.Controller;
+import org.keycloak.representations.AccessToken;
+@Path("/v1/")
+/**
+ *
+ * UI oriented servlet - to return elements in specific format UI needs
+ *
+ *
+ */
+@Loggable(prepend = true, value = Loggable.DEBUG, trim = false)
+@io.swagger.v3.oas.annotations.tags.Tag(name = "SDCE-2 APIs")
+@Server(url = "/sdc2/rest")
+@Controller
+public class ElementServlet extends BeGenericServlet {
+
+ private static final Logger log = Logger.getLogger(ElementServlet.class);
+ private static final String START_HANDLE_REQUEST_OF = "Start handle request of {}";
+ private final ComponentsCleanBusinessLogic componentsCleanBusinessLogic;
+ private final ElementBusinessLogic elementBusinessLogic;
+ private final ArtifactsBusinessLogic artifactsBusinessLogic;
+ private final ModelBusinessLogic modelBusinessLogic;
+
+ @Inject
+ public ElementServlet(final ComponentsUtils componentsUtils,
+ final ComponentsCleanBusinessLogic componentsCleanBusinessLogic, final ElementBusinessLogic elementBusinessLogic,
+ final ArtifactsBusinessLogic artifactsBusinessLogic, final ModelBusinessLogic modelBusinessLogic) {
+ super(componentsUtils);
+ this.componentsCleanBusinessLogic = componentsCleanBusinessLogic;
+ this.elementBusinessLogic = elementBusinessLogic;
+ this.artifactsBusinessLogic = artifactsBusinessLogic;
+ this.modelBusinessLogic = modelBusinessLogic;
+ }
+ /*
+ ******************************************************************************
+ * NEW CATEGORIES category / \ subcategory subcategory / grouping
+ ******************************************************************************/
+
+ /*
+ *
+ *
+ * CATEGORIES
+ */
+
+ /////////////////////////////////////////////////////////////////////////////////////////////////////
+
+ // retrieve all component categories
+ @GET
+ @Path("/categories/{componentType}")
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ @Operation(description = "Retrieve the list of all resource/service/product categories/sub-categories/groupings", method = "GET", summary = "Retrieve the list of all resource/service/product categories/sub-categories/groupings.", responses = {
+ @ApiResponse(content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))),
+ @ApiResponse(responseCode = "200", description = "Returns categories Ok"),
+ @ApiResponse(responseCode = "403", description = "Missing information"),
+ @ApiResponse(responseCode = "400", description = "Invalid component type"),
+ @ApiResponse(responseCode = "409", description = "Restricted operation"),
+ @ApiResponse(responseCode = "500", description = "Internal Server Error")})
+ public Response getComponentCategories(
+ @Parameter(description = "allowed values are resources / services/ products", schema = @Schema(allowableValues = {
+ ComponentTypeEnum.RESOURCE_PARAM_NAME, ComponentTypeEnum.SERVICE_PARAM_NAME,
+ ComponentTypeEnum.PRODUCT_PARAM_NAME}), required = true) @PathParam(value = "componentType") final String componentType,
+ @HeaderParam(value = Constants.USER_ID_HEADER) String userId, @Context final HttpServletRequest request) {
+ try {
+ ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
+ Either<List<CategoryDefinition>, ResponseFormat> either = elementBL.getAllCategories(componentType, userId);
+ if (either.isRight()) {
+ log.debug("No categories were found for type {}", componentType);
+ return buildErrorResponse(either.right().value());
+ } else {
+ return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), either.left().value());
+ }
+ } catch (Exception e) {
+ BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get Component Categories");
+ log.debug("getComponentCategories failed with exception", e);
+ throw e;
+ }
+ }
+
+ @POST
+ @Path("/category/{componentType}")
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ @Operation(description = "Create new component category", method = "POST", summary = "Create new component category", responses = {
+ @ApiResponse(responseCode = "201", description = "Category created"),
+ @ApiResponse(responseCode = "400", description = "Invalid category data"),
+ @ApiResponse(responseCode = "403", description = "USER_ID header is missing"),
+ @ApiResponse(responseCode = "409", description = "Category already exists / User not permitted to perform the action"),
+ @ApiResponse(responseCode = "500", description = "General Error")})
+ public Response createComponentCategory(
+ @Parameter(description = "allowed values are resources /services / products", schema = @Schema(allowableValues = {
+ ComponentTypeEnum.RESOURCE_PARAM_NAME, ComponentTypeEnum.SERVICE_PARAM_NAME,
+ ComponentTypeEnum.PRODUCT_PARAM_NAME}), required = true) @PathParam(value = "componentType") final String componentType,
+ @Parameter(description = "Category to be created", required = true) String data, @Context final HttpServletRequest request,
+ @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
+ try {
+ ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
+ CategoryDefinition category = RepresentationUtils.fromRepresentation(data, CategoryDefinition.class);
+ Either<CategoryDefinition, ResponseFormat> createResourceCategory = elementBL.createCategory(category, componentType, userId);
+ if (createResourceCategory.isRight()) {
+ return buildErrorResponse(createResourceCategory.right().value());
+ }
+ ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.CREATED);
+ return buildOkResponse(responseFormat, createResourceCategory.left().value());
+ } catch (Exception e) {
+ BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Create resource category");
+ log.debug("createResourceCategory failed with exception", e);
+ throw e;
+ }
+ }
+
+ @GET
+ @Path("/category/{componentType}/{categoryName}/baseTypes")
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ @Operation(description = "Get base types for category", method = "GET", summary = "Get base types for category",
+ responses = {@ApiResponse(responseCode = "200", description = "Returns base types Ok"),
+ @ApiResponse(responseCode = "404", description = "No base types were found"),
+ @ApiResponse(responseCode = "500", description = "Internal Server Error")})
+ public Response getCategoryBaseTypes(@PathParam(value = "categoryName") final String categoryName,
+ @PathParam(value = "componentType") final String componentType,
+ @Context final HttpServletRequest request,
+ @HeaderParam(value = Constants.USER_ID_HEADER) String userId,
+ @Parameter(description = "model", required = false) @QueryParam("model") String modelName) {
+ try {
+ final ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
+ final Either<List<BaseType>, ActionStatus> either = elementBL.getBaseTypes(categoryName, userId, modelName);
+
+ if (either.isRight() || either.left().value() == null) {
+ log.debug("No base types were found");
+ return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT));
+ } else {
+ final Map<String, Object> baseTypesMap = new HashMap<>();
+ baseTypesMap.put("baseTypes", either.left().value());
+ baseTypesMap.put("required", elementBL.isBaseTypeRequired(categoryName));
+ baseTypesMap.put("defaultBaseType", elementBL.getDefaultBaseType(categoryName));
+ baseTypesMap.put("doNotExtendBaseType", elementBL.isDoNotExtendBaseType(categoryName));
+
+ return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), baseTypesMap);
+ }
+ } catch (Exception e) {
+ BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get base types of category");
+ log.debug("getCategoryBaseTypes failed with exception", e);
+ throw e;
+ }
+ }
+
+ @DELETE
+ @Path("/category/{componentType}/{categoryUniqueId}")
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ @Operation(description = "Delete component category", method = "DELETE", summary = "Delete component category", responses = {
+ @ApiResponse(content = @Content(array = @ArraySchema(schema = @Schema(implementation = Category.class)))),
+ @ApiResponse(responseCode = "204", description = "Category deleted"),
+ @ApiResponse(responseCode = "403", description = "USER_ID header is missing"),
+ @ApiResponse(responseCode = "409", description = "User not permitted to perform the action"),
+ @ApiResponse(responseCode = "404", description = "Category not found"), @ApiResponse(responseCode = "500", description = "General Error")})
+ public Response deleteComponentCategory(@PathParam(value = "categoryUniqueId") final String categoryUniqueId,
+ @PathParam(value = "componentType") final String componentType, @Context final HttpServletRequest request,
+ @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
+ try {
+ ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
+ Either<CategoryDefinition, ResponseFormat> createResourceCategory = elementBL.deleteCategory(categoryUniqueId, componentType, userId);
+ if (createResourceCategory.isRight()) {
+ return buildErrorResponse(createResourceCategory.right().value());
+ }
+ ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT);
+ return buildOkResponse(responseFormat, null);
+ } catch (Exception e) {
+ BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Create resource category");
+ log.debug("createResourceCategory failed with exception", e);
+ throw e;
+ }
+ }
+
+ /*
+ *
+ *
+ * SUBCATEGORIES
+ *
+ */
+ @POST
+ @Path("/category/{componentType}/{categoryId}/subCategory")
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ @Operation(description = "Create new component sub-category", method = "POST", summary = "Create new component sub-category for existing category", responses = {
+ @ApiResponse(responseCode = "201", description = "Subcategory created"),
+ @ApiResponse(responseCode = "400", description = "Invalid subcategory data"),
+ @ApiResponse(responseCode = "403", description = "USER_ID header is missing"),
+ @ApiResponse(responseCode = "404", description = "Parent category wasn't found"),
+ @ApiResponse(responseCode = "409", description = "Subcategory already exists / User not permitted to perform the action"),
+ @ApiResponse(responseCode = "500", description = "General Error")})
+ public Response createComponentSubCategory(
+ @Parameter(description = "allowed values are resources / products", schema = @Schema(allowableValues = {ComponentTypeEnum.RESOURCE_PARAM_NAME,
+ ComponentTypeEnum.PRODUCT_PARAM_NAME}), required = true) @PathParam(value = "componentType") final String componentType,
+ @Parameter(description = "Parent category unique ID", required = true) @PathParam(value = "categoryId") final String categoryId,
+ @Parameter(description = "Subcategory to be created. \ne.g. {\"name\":\"Resource-subcat\"}", required = true) String data,
+ @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
+ try {
+ ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
+ SubCategoryDefinition subCategory = RepresentationUtils.fromRepresentation(data, SubCategoryDefinition.class);
+ Either<SubCategoryDefinition, ResponseFormat> createSubcategory = elementBL
+ .createSubCategory(subCategory, componentType, categoryId, userId);
+ if (createSubcategory.isRight()) {
+ return buildErrorResponse(createSubcategory.right().value());
+ }
+ ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.CREATED);
+ return buildOkResponse(responseFormat, createSubcategory.left().value());
+ } catch (Exception e) {
+ BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Create sub-category");
+ log.debug("createComponentSubCategory failed with exception", e);
+ throw e;
+ }
+ }
+
+ @DELETE
+ @Path("/category/{componentType}/{categoryUniqueId}/subCategory/{subCategoryUniqueId}")
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ @Operation(description = "Delete component category", method = "DELETE", summary = "Delete component category", responses = {
+ @ApiResponse(content = @Content(array = @ArraySchema(schema = @Schema(implementation = Category.class)))),
+ @ApiResponse(responseCode = "204", description = "Category deleted"),
+ @ApiResponse(responseCode = "403", description = "USER_ID header is missing"),
+ @ApiResponse(responseCode = "409", description = "User not permitted to perform the action"),
+ @ApiResponse(responseCode = "404", description = "Category not found"), @ApiResponse(responseCode = "500", description = "General Error")})
+ public Response deleteComponentSubCategory(@PathParam(value = "categoryUniqueId") final String categoryUniqueId,
+ @PathParam(value = "subCategoryUniqueId") final String subCategoryUniqueId,
+ @PathParam(value = "componentType") final String componentType,
+ @Context final HttpServletRequest request,
+ @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
+ try {
+ ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
+ Either<SubCategoryDefinition, ResponseFormat> deleteSubResourceCategory = elementBL
+ .deleteSubCategory(subCategoryUniqueId, componentType, userId);
+ if (deleteSubResourceCategory.isRight()) {
+ return buildErrorResponse(deleteSubResourceCategory.right().value());
+ }
+ ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT);
+ return buildOkResponse(responseFormat, null);
+ } catch (Exception e) {
+ BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Delete component subcategory");
+ log.debug("deleteComponentSubCategory failed with exception", e);
+ throw e;
+ }
+ }
+
+ /*
+ * GROUPINGS
+ */
+ @POST
+ @Path("/category/{componentType}/{categoryId}/subCategory/{subCategoryId}/grouping")
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ @Operation(description = "Create new component grouping", method = "POST", summary = "Create new component grouping for existing sub-category", responses = {
+ @ApiResponse(responseCode = "201", description = "Grouping created"),
+ @ApiResponse(responseCode = "400", description = "Invalid grouping data"),
+ @ApiResponse(responseCode = "403", description = "USER_ID header is missing"),
+ @ApiResponse(responseCode = "404", description = "Parent category or subcategory were not found"),
+ @ApiResponse(responseCode = "409", description = "Grouping already exists / User not permitted to perform the action"),
+ @ApiResponse(responseCode = "500", description = "General Error")})
+ public Response createComponentGrouping(@Parameter(description = "allowed values are products", schema = @Schema(allowableValues = {
+ ComponentTypeEnum.PRODUCT_PARAM_NAME}), required = true) @PathParam(value = "componentType") final String componentType,
+ @Parameter(description = "Parent category unique ID", required = true) @PathParam(value = "categoryId") final String grandParentCategoryId,
+ @Parameter(description = "Parent sub-category unique ID", required = true) @PathParam(value = "subCategoryId") final String parentSubCategoryId,
+ @Parameter(description = "Subcategory to be created", required = true) String data,
+ @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
+ try {
+ ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
+ GroupingDefinition grouping = RepresentationUtils.fromRepresentation(data, GroupingDefinition.class);
+ Either<GroupingDefinition, ResponseFormat> createGrouping = elementBL
+ .createGrouping(grouping, componentType, grandParentCategoryId, parentSubCategoryId, userId);
+ if (createGrouping.isRight()) {
+ return buildErrorResponse(createGrouping.right().value());
+ }
+ ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.CREATED);
+ return buildOkResponse(responseFormat, createGrouping.left().value());
+ } catch (Exception e) {
+ BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Create grouping");
+ log.debug("createComponentGrouping failed with exception", e);
+ throw e;
+ }
+ }
+
+ @DELETE
+ @Path("/category/{componentType}/{categoryUniqueId}/subCategory/{subCategoryUniqueId}/grouping/{groupingUniqueId}")
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ @Operation(description = "Delete component category", method = "DELETE", summary = "Delete component category", responses = {
+ @ApiResponse(content = @Content(array = @ArraySchema(schema = @Schema(implementation = Category.class)))),
+ @ApiResponse(responseCode = "204", description = "Category deleted"),
+ @ApiResponse(responseCode = "403", description = "USER_ID header is missing"),
+ @ApiResponse(responseCode = "409", description = "User not permitted to perform the action"),
+ @ApiResponse(responseCode = "404", description = "Category not found"), @ApiResponse(responseCode = "500", description = "General Error")})
+ public Response deleteComponentGrouping(@PathParam(value = "categoryUniqueId") final String grandParentCategoryUniqueId,
+ @PathParam(value = "subCategoryUniqueId") final String parentSubCategoryUniqueId,
+ @PathParam(value = "groupingUniqueId") final String groupingUniqueId,
+ @PathParam(value = "componentType") final String componentType, @Context final HttpServletRequest request,
+ @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
+ try {
+ ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
+ Either<GroupingDefinition, ResponseFormat> deleteGrouping = elementBL.deleteGrouping(groupingUniqueId, componentType, userId);
+ if (deleteGrouping.isRight()) {
+ return buildErrorResponse(deleteGrouping.right().value());
+ }
+ ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT);
+ return buildOkResponse(responseFormat, null);
+ } catch (Exception e) {
+ BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Delete component grouping");
+ log.debug("deleteGrouping failed with exception", e);
+ throw e;
+ }
+ }
+ /////////////////////////////////////////////////////////////////////////////////////////////////////
+
+ // retrieve all tags
+ @GET
+ @Path("/tags")
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ @Operation(description = "Retrieve all tags", method = "GET", summary = "Retrieve all tags", responses = {
+ @ApiResponse(content = @Content(array = @ArraySchema(schema = @Schema(implementation = User.class)))),
+ @ApiResponse(responseCode = "200", description = "Returns tags Ok"), @ApiResponse(responseCode = "404", description = "No tags were found"),
+ @ApiResponse(responseCode = "500", description = "Internal Server Error")})
+ public Response getTags(@Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
+ String url = request.getMethod() + " " + request.getRequestURI();
+ log.debug("(getTags) Start handle request of {}", url);
+ try {
+ ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
+ Either<List<Tag>, ActionStatus> either = elementBL.getAllTags(userId);
+ if (either.isRight() || either.left().value() == null) {
+ log.debug("No tags were found");
+ return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT));
+ } else {
+ return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), either.left().value());
+ }
+ } catch (Exception e) {
+ BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get All Tags");
+ log.debug("getAllTags failed with exception", e);
+ throw e;
+ }
+ }
+ /////////////////////////////////////////////////////////////////////////////////////////////////////
+
+ // retrieve all property scopes
+ @GET
+ @Path("/propertyScopes")
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ @Operation(description = "Retrieve all propertyScopes", method = "GET", summary = "Retrieve all propertyScopes", responses = {
+ @ApiResponse(content = @Content(array = @ArraySchema(schema = @Schema(implementation = User.class)))),
+ @ApiResponse(responseCode = "200", description = "Returns propertyScopes Ok"),
+ @ApiResponse(responseCode = "404", description = "No propertyScopes were found"),
+ @ApiResponse(responseCode = "500", description = "Internal Server Error")})
+ public Response getPropertyScopes(@Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
+ String url = request.getMethod() + " " + request.getRequestURI();
+ log.debug("(getPropertyScopes) Start handle request of {}", url);
+ try {
+ ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
+ Either<List<PropertyScope>, ActionStatus> either = elementBL.getAllPropertyScopes(userId);
+ if (either.isRight() || either.left().value() == null) {
+ log.debug("No property scopes were found");
+ return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT));
+ } else {
+ return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), either.left().value());
+ }
+ } catch (Exception e) {
+ BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get Property Scopes Categories");
+ log.debug("getPropertyScopes failed with exception", e);
+ throw e;
+ }
+ }
+ /////////////////////////////////////////////////////////////////////////////////////////////////////
+
+ // retrieve all artifact types
+ @GET
+ @Path("/artifactTypes")
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ @Operation(description = "Retrieve all artifactTypes", method = "GET", summary = "Retrieve all artifactTypes", responses = {
+ @ApiResponse(content = @Content(array = @ArraySchema(schema = @Schema(implementation = User.class)))),
+ @ApiResponse(responseCode = "200", description = "Returns artifactTypes Ok"),
+ @ApiResponse(responseCode = "404", description = "No artifactTypes were found"),
+ @ApiResponse(responseCode = "500", description = "Internal Server Error")})
+ public Response getArtifactTypes(@Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
+ String url = request.getMethod() + " " + request.getRequestURI();
+ log.debug("(GET - getArtifactTypes) Start handle request of {}", url);
+ try {
+ ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
+ Either<List<ArtifactType>, ActionStatus> either = elementBL.getAllArtifactTypes(userId);
+ if (either.isRight() || either.left().value() == null) {
+ log.debug("No artifact types were found");
+ return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT));
+ } else {
+ Integer defaultHeatTimeout = ConfigurationManager.getConfigurationManager().getConfiguration().getHeatArtifactDeploymentTimeout()
+ .getDefaultMinutes();
+ ArtifactTypesInfo typesResponse = new ArtifactTypesInfo();
+ typesResponse.setArtifactTypes(either.left().value());
+ typesResponse.setHeatDefaultTimeout(defaultHeatTimeout);
+ return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), typesResponse);
+ }
+ } catch (Exception e) {
+ BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get Artifact Types");
+ log.debug("getArtifactTypes failed with exception", e);
+ throw e;
+ }
+ }
+ /////////////////////////////////////////////////////////////////////////////////////////////////////
+
+ // retrieve all followed resources and services
+ @GET
+ @Path("/followed")
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ @Operation(description = "Retrieve all followed", method = "GET", summary = "Retrieve all followed", responses = {
+ @ApiResponse(content = @Content(array = @ArraySchema(schema = @Schema(implementation = User.class)))),
+ @ApiResponse(responseCode = "200", description = "Returns followed Ok"),
+ @ApiResponse(responseCode = "404", description = "No followed were found"),
+ @ApiResponse(responseCode = "404", description = "User not found"),
+ @ApiResponse(responseCode = "500", description = "Internal Server Error")})
+ public Response getFollowedResourcesServices(@Context final HttpServletRequest request,
+ @HeaderParam(value = Constants.USER_ID_HEADER) String userId) throws IOException {
+ try {
+ String url = request.getMethod() + " " + request.getRequestURI();
+ log.debug(START_HANDLE_REQUEST_OF, url);
+ UserBusinessLogic userAdminManager = getUserAdminManager(request.getSession().getServletContext());
+ User userData = userAdminManager.getUser(userId, false);
+ Either<Map<String, List<? extends Component>>, ResponseFormat> followedResourcesServices = getElementBL(
+ request.getSession().getServletContext()).getFollowed(userData);
+ if (followedResourcesServices.isRight()) {
+ log.debug("failed to get followed resources services ");
+ return buildErrorResponse(followedResourcesServices.right().value());
+ }
+ Multitenancy keyaccess= new Multitenancy();
+ if (keyaccess.multiTenancyCheck()) {
+ AccessToken.Access realmAccess = keyaccess.getAccessToken(request).getRealmAccess();
+ Set<String> realmroles = realmAccess.getRoles();
+ Map<String, List<? extends Component>> dataResponse = new HashMap<>();
+ followedResourcesServices.left().value().entrySet().stream()
+ .forEach(component->{component.setValue(component.getValue().stream().filter(cm->realmroles.stream()
+ .anyMatch(role->cm.getTenant().equals(role))).collect(Collectors.toList()));
+ dataResponse.put(component.getKey(), component.getValue());
+ });
+ Object data = RepresentationUtils.toRepresentation(dataResponse);
+ return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), data);
+ }
+ else{
+ Object data = RepresentationUtils.toRepresentation(followedResourcesServices.left().value());
+ return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), data);
+ }
+ } catch (Exception e) {
+ BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get Followed Resources / Services Categories");
+ log.debug("Getting followed resources/services failed with exception", e);
+ throw e;
+ }
+ }
+ /////////////////////////////////////////////////////////////////////////////////////////////////////
+
+ // retrieve all certified resources and services and their last version
+ @GET
+ @Path("/screen")
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ @Operation(description = "Retrieve catalog resources and services", method = "GET", summary = "Retrieve catalog resources and services", responses = {
+ @ApiResponse(content = @Content(array = @ArraySchema(schema = @Schema(implementation = User.class)))),
+ @ApiResponse(responseCode = "200", description = "Returns resources and services Ok"),
+ @ApiResponse(responseCode = "404", description = "No resources and services were found"),
+ @ApiResponse(responseCode = "404", description = "User not found"),
+ @ApiResponse(responseCode = "500", description = "Internal Server Error")})
+ public Response getCatalogComponents(@Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId,
+ @QueryParam("excludeTypes") List<OriginTypeEnum> excludeTypes) throws IOException {
+ try {
+ String url = request.getMethod() + " " + request.getRequestURI();
+ log.debug(START_HANDLE_REQUEST_OF, url);
+ Either<Map<String, List<CatalogComponent>>, ResponseFormat> catalogData = getElementBL(request.getSession().getServletContext())
+ .getCatalogComponents(excludeTypes);
+ if (catalogData.isRight()) {
+ log.debug("failed to get catalog data");
+ return buildErrorResponse(catalogData.right().value());
+ }
+ Object data = RepresentationUtils.toRepresentation(catalogData.left().value());
+ return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), data);
+ } catch (Exception e) {
+ BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get Catalog Components");
+ log.debug("Getting catalog components failed with exception", e);
+ throw e;
+ }
+ }
+
+ @DELETE
+ @Path("/inactiveComponents/{componentType}")
+ public Response deleteMarkedResources(@PathParam("componentType") final String componentType, @Context final HttpServletRequest request) {
+ String url = request.getMethod() + " " + request.getRequestURI();
+ log.debug(START_HANDLE_REQUEST_OF, url);
+ // get modifier id
+ String userId = request.getHeader(Constants.USER_ID_HEADER);
+ User modifier = new User();
+ modifier.setUserId(userId);
+ log.debug("modifier id is {}", userId);
+ NodeTypeEnum nodeType = NodeTypeEnum.getByNameIgnoreCase(componentType);
+ if (nodeType == null) {
+ log.info("componentType is not valid: {}", componentType);
+ return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.INVALID_CONTENT));
+ }
+ List<NodeTypeEnum> componentsList = new ArrayList<>();
+ componentsList.add(nodeType);
+ try {
+ Map<NodeTypeEnum, Either<List<String>, ResponseFormat>> cleanComponentsResult = componentsCleanBusinessLogic
+ .cleanComponents(componentsList);
+ Either<List<String>, ResponseFormat> cleanResult = cleanComponentsResult.get(nodeType);
+ if (cleanResult.isRight()) {
+ log.debug("failed to delete marked components of type {}", nodeType);
+ return buildErrorResponse(cleanResult.right().value());
+ }
+ return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), cleanResult.left().value());
+ } catch (Exception e) {
+ BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Delete Marked Components");
+ log.debug("delete marked components failed with exception", e);
+ throw e;
+ }
+ }
+
+ @GET
+ @Path("/ecompPortalMenu")
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ @Operation(description = "Retrieve ecomp portal menu - MOC", method = "GET", summary = "Retrieve ecomp portal menu", responses = {
+ @ApiResponse(content = @Content(array = @ArraySchema(schema = @Schema(implementation = User.class)))),
+ @ApiResponse(responseCode = "200", description = "Retrieve ecomp portal menu")})
+ public Response getListOfCsars(@Context final HttpServletRequest request) {
+ return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK),
+ "[{\"menuId\":1,\"column\":2,\"text\":\"Design\",\"parentMenuId\":null,\"url\":\"\",\"appid\":null,\"roles\":null,\"children\":[{\"menuId\":11,\"column\":1,\"text\":\"ProductDesign\",\"parentMenuId\":1,\"url\":\"\",\"appid\":null,\"roles\":null},{\"menuId\":12,\"column\":2,\"text\":\"Service\",\"parentMenuId\":1,\"url\":\"\",\"appid\":null,\"roles\":null,\"children\":[{\"menuId\":21,\"column\":1,\"text\":\"ViewPolicies\",\"parentMenuId\":12,\"url\":\"\",\"appid\":null,\"roles\":null,\"children\":[{\"menuId\":90,\"column\":1,\"text\":\"4thLevelApp1aR16\",\"parentMenuId\":21,\"url\":\"http://google.com\",\"appid\":null,\"roles\":null}]},{\"menuId\":22,\"column\":2,\"text\":\"UpdatePolicies\",\"parentMenuId\":12,\"url\":\"\",\"appid\":null,\"roles\":null,\"children\":[{\"menuId\":91,\"column\":1,\"text\":\"4thLevelApp1bR16\",\"parentMenuId\":22,\"url\":\"http://jsonlint.com/\",\"appid\":null,\"roles\":null}]},{\"menuId\":23,\"column\":3,\"text\":\"UpdateRules\",\"parentMenuId\":12,\"url\":\"\",\"appid\":null,\"roles\":null},{\"menuId\":24,\"column\":4,\"text\":\"CreateSignatures?\",\"parentMenuId\":12,\"url\":\"\",\"appid\":null,\"roles\":null},{\"menuId\":25,\"column\":5,\"text\":\"Definedata\",\"parentMenuId\":12,\"url\":\"\",\"appid\":null,\"roles\":null}]}]}]");
+ }
+
+ @GET
+ @Path("/catalogUpdateTime")
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ @Operation(description = "Retrieve previus and current catalog update time", method = "GET", summary = "Retrieve previus and current catalog update time", responses = {
+ @ApiResponse(content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))),
+ @ApiResponse(responseCode = "200", description = "Retrieve previus and current catalog update time")})
+ public Response getCatalogUpdateTime(@Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
+ String url = request.getMethod() + " " + request.getRequestURI();
+ log.debug("(post) Start handle request of {}", url);
+ CatalogUpdateTimestamp catalogUpdateTimestamp = getElementBL(request.getSession().getServletContext()).getCatalogUpdateTime();
+ return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), catalogUpdateTimestamp);
+ }
+
+ // retrieve all artifact types, ui configuration and sdc version
+ @GET
+ @Path("/setup/ui")
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ @Operation(description = "Retrieve all artifactTypes, ui configuration and sdc version", method = "GET", summary = "Retrieve all artifactTypes, ui configuration and sdc version", responses = {
+ @ApiResponse(content = @Content(array = @ArraySchema(schema = @Schema(implementation = User.class)))),
+ @ApiResponse(responseCode = "200", description = "Returns artifactTypes, ui configuration and sdc version Ok"),
+ @ApiResponse(responseCode = "404", description = "No artifactTypes were found/no ui configuration were found/no sdc version were found"),
+ @ApiResponse(responseCode = "500", description = "Internal Server Error")})
+ public Response getConfCategoriesAndVersion(@Context final HttpServletRequest request,
+ @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
+ String url = request.getMethod() + " " + request.getRequestURI();
+ log.debug("(getConsolidated) Start handle request of {}", url);
+ Map<String, Object> consolidatedObject = new HashMap<>();
+ try {
+ ServletContext servletContext = request.getSession().getServletContext();
+ Map<String, Object> configuration = getConfigurationUi(elementBusinessLogic);
+ if (!configuration.isEmpty()) {
+ consolidatedObject.put("configuration", configuration);
+ } else {
+ return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT));
+ }
+ Either<UiCategories, ResponseFormat> either = elementBusinessLogic.getAllCategories(userId);
+ if (either.isRight()) {
+ log.debug("No categories were found");
+ return buildErrorResponse(either.right().value());
+ }
+ consolidatedObject.put("categories", either.left().value());
+ consolidatedObject.put("models", modelBusinessLogic.listModels());
+ consolidatedObject.put("version", getVersion(servletContext));
+ } catch (Exception e) {
+ BeEcompErrorManager.getInstance().logBeRestApiGeneralError("getSDCVersion");
+ log.debug("method getConfCategoriesAndVersion failed with unexpected exception", e);
+ throw e;
+ }
+ return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), consolidatedObject);
+ }
+
+ private String getVersion(ServletContext servletContext) {
+ String version = (String) servletContext.getAttribute(Constants.ASDC_RELEASE_VERSION_ATTR);
+ log.debug("sdc version from manifest is: {}", version);
+ return version;
+ }
+
+ private Map<String, Object> getConfigurationUi(final ElementBusinessLogic elementBL) {
+ Either<Configuration.HeatDeploymentArtifactTimeout, ActionStatus> defaultHeatTimeout = elementBL.getDefaultHeatTimeout();
+ Either<Map<String, String>, ActionStatus> resourceTypesMap = elementBL.getResourceTypesMap();
+ Map<String, Object> configuration = new HashMap<>();
+ if (defaultHeatTimeout.isRight() || defaultHeatTimeout.left().value() == null) {
+ log.debug("heat default timeout was not found");
+ return configuration;
+ }
+ if (resourceTypesMap.isRight() || resourceTypesMap.left().value() == null) {
+ log.debug("No resource types were found");
+ return configuration;
+ }
+ configuration.put("artifact", artifactsBusinessLogic.getConfiguration());
+ configuration.put("heatDeploymentTimeout", defaultHeatTimeout.left().value());
+ configuration.put("componentTypes", elementBL.getAllComponentTypesParamNames());
+ configuration.put("roles", elementBL.getAllSupportedRoles());
+ configuration.put("resourceTypes", resourceTypesMap.left().value());
+ configuration.put("environmentContext", ConfigurationManager.getConfigurationManager().getConfiguration().getEnvironmentContext());
+ configuration.put("gab", ConfigurationManager.getConfigurationManager().getConfiguration().getGabConfig());
+ return configuration;
+ }
+}