2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.openecomp.sdc.be.servlets;
23 import com.jcabi.aspects.Loggable;
24 import fj.data.Either;
25 import org.openecomp.sdc.be.components.clean.ComponentsCleanBusinessLogic;
26 import org.openecomp.sdc.be.components.impl.ElementBusinessLogic;
27 import org.openecomp.sdc.be.config.BeEcompErrorManager;
28 import org.openecomp.sdc.be.config.ConfigurationManager;
29 import org.openecomp.sdc.be.dao.api.ActionStatus;
30 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
31 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
32 import org.openecomp.sdc.be.datatypes.enums.OriginTypeEnum;
33 import org.openecomp.sdc.be.info.ArtifactTypesInfo;
34 import org.openecomp.sdc.be.model.*;
35 import org.openecomp.sdc.be.model.category.CategoryDefinition;
36 import org.openecomp.sdc.be.model.category.GroupingDefinition;
37 import org.openecomp.sdc.be.model.category.SubCategoryDefinition;
38 import org.openecomp.sdc.be.ui.model.UiCategories;
39 import org.openecomp.sdc.be.user.UserBusinessLogic;
40 import org.openecomp.sdc.common.api.Constants;
41 import org.openecomp.sdc.common.config.EcompErrorName;
42 import org.openecomp.sdc.exception.ResponseFormat;
43 import org.slf4j.Logger;
44 import org.slf4j.LoggerFactory;
46 import javax.inject.Singleton;
47 import io.swagger.annotations.Api;
48 import io.swagger.annotations.ApiOperation;
49 import io.swagger.annotations.ApiParam;
50 import io.swagger.annotations.ApiResponse;
51 import io.swagger.annotations.ApiResponses;
53 import javax.servlet.ServletContext;
54 import javax.servlet.http.HttpServletRequest;
56 import javax.ws.rs.core.Context;
57 import javax.ws.rs.core.MediaType;
58 import javax.ws.rs.core.Response;
65 * UI oriented servlet - to return elements in specific format UI needs
69 @Loggable(prepend = true, value = Loggable.DEBUG, trim = false)
70 @Api(value = "Element Servlet", description = "Element Servlet")
72 public class ElementServlet extends BeGenericServlet {
74 private static Logger log = LoggerFactory.getLogger(ElementServlet.class.getName());
77 ******************************************************************************
78 * NEW CATEGORIES category / \ subcategory subcategory / grouping
79 ******************************************************************************/
86 /////////////////////////////////////////////////////////////////////////////////////////////////////
87 // retrieve all component categories
89 @Path("/categories/{componentType}")
90 @Consumes(MediaType.APPLICATION_JSON)
91 @Produces(MediaType.APPLICATION_JSON)
92 @ApiOperation(value = "Retrieve the list of all resource/service/product categories/sub-categories/groupings", httpMethod = "GET", notes = "Retrieve the list of all resource/service/product categories/sub-categories/groupings.", response = Response.class)
93 @ApiResponses(value = { @ApiResponse(code = 200, message = "Returns categories Ok"), @ApiResponse(code = 403, message = "Missing information"), @ApiResponse(code = 400, message = "Invalid component type"),
94 @ApiResponse(code = 409, message = "Restricted operation"), @ApiResponse(code = 500, message = "Internal Server Error") })
95 public Response getComponentCategories(@ApiParam(value = "allowed values are resources / services/ products", allowableValues = ComponentTypeEnum.RESOURCE_PARAM_NAME + "," + ComponentTypeEnum.SERVICE_PARAM_NAME + ","
96 + ComponentTypeEnum.PRODUCT_PARAM_NAME, required = true) @PathParam(value = "componentType") final String componentType, @HeaderParam(value = Constants.USER_ID_HEADER) String userId, @Context final HttpServletRequest request) {
99 ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
100 Either<List<CategoryDefinition>, ResponseFormat> either = elementBL.getAllCategories(componentType, userId);
101 if (either.isRight()) {
102 log.debug("No categories were found for type {}", componentType);
103 return buildErrorResponse(either.right().value());
105 return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), either.left().value());
107 } catch (Exception e) {
108 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Get Component Categories");
109 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get Component Categories");
110 log.debug("getComponentCategories failed with exception", e);
111 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
117 @Consumes(MediaType.APPLICATION_JSON)
118 @Produces(MediaType.APPLICATION_JSON)
119 @ApiOperation(value = "Retrieve the all resource, service and product categories", httpMethod = "GET", notes = "Retrieve the all resource, service and product categories", response = Response.class)
120 @ApiResponses(value = { @ApiResponse(code = 200, message = "Returns categories Ok"), @ApiResponse(code = 403, message = "Missing information"),
121 @ApiResponse(code = 409, message = "Restricted operation"), @ApiResponse(code = 500, message = "Internal Server Error") })
122 public Response getAllCategories(@Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
125 ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
126 Either<UiCategories, ResponseFormat> either = elementBL.getAllCategories(userId);
127 if (either.isRight()) {
128 log.debug("No categories were found");
129 return buildErrorResponse(either.right().value());
131 return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), either.left().value());
133 } catch (Exception e) {
134 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Get All Categories");
135 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get All Categories");
136 log.debug("getAllCategories failed with exception", e);
137 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
143 @Path("/category/{componentType}")
144 @Consumes(MediaType.APPLICATION_JSON)
145 @Produces(MediaType.APPLICATION_JSON)
146 @ApiOperation(value = "Create new component category", httpMethod = "POST", notes = "Create new component category")
147 @ApiResponses(value = { @ApiResponse(code = 201, message = "Category created"), @ApiResponse(code = 400, message = "Invalid category data"), @ApiResponse(code = 403, message = "USER_ID header is missing"),
148 @ApiResponse(code = 409, message = "Category already exists / User not permitted to perform the action"), @ApiResponse(code = 500, message = "General Error") })
149 public Response createComponentCategory(
150 @ApiParam(value = "allowed values are resources /services / products", allowableValues = ComponentTypeEnum.RESOURCE_PARAM_NAME + "," + ComponentTypeEnum.SERVICE_PARAM_NAME + ","
151 + ComponentTypeEnum.PRODUCT_PARAM_NAME, required = true) @PathParam(value = "componentType") final String componentType,
152 @ApiParam(value = "Category to be created", required = true) String data, @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
154 ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
155 CategoryDefinition category = RepresentationUtils.fromRepresentation(data, CategoryDefinition.class);
157 Either<CategoryDefinition, ResponseFormat> createResourceCategory = elementBL.createCategory(category, componentType, userId);
158 if (createResourceCategory.isRight()) {
159 return buildErrorResponse(createResourceCategory.right().value());
162 ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.CREATED);
163 return buildOkResponse(responseFormat, createResourceCategory.left().value());
165 } catch (Exception e) {
166 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Create resource category");
167 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Create resource category");
168 log.debug("createResourceCategory failed with exception", e);
169 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
175 @Path("/category/{componentType}/{categoryUniqueId}")
176 @Consumes(MediaType.APPLICATION_JSON)
177 @Produces(MediaType.APPLICATION_JSON)
178 @ApiOperation(value = "Delete component category", httpMethod = "DELETE", notes = "Delete component category", response = Category.class)
179 @ApiResponses(value = { @ApiResponse(code = 204, message = "Category deleted"), @ApiResponse(code = 403, message = "USER_ID header is missing"), @ApiResponse(code = 409, message = "User not permitted to perform the action"),
180 @ApiResponse(code = 404, message = "Category not found"), @ApiResponse(code = 500, message = "General Error") })
181 public Response deleteComponentCategory(@PathParam(value = "categoryUniqueId") final String categoryUniqueId, @PathParam(value = "componentType") final String componentType, @Context final HttpServletRequest request,
182 @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
185 ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
186 Either<CategoryDefinition, ResponseFormat> createResourceCategory = elementBL.deleteCategory(categoryUniqueId, componentType, userId);
188 if (createResourceCategory.isRight()) {
189 return buildErrorResponse(createResourceCategory.right().value());
191 ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT);
192 return buildOkResponse(responseFormat, null);
194 } catch (Exception e) {
195 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Create resource category");
196 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Create resource category");
197 log.debug("createResourceCategory failed with exception", e);
198 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
211 @Path("/category/{componentType}/{categoryId}/subCategory")
212 @Consumes(MediaType.APPLICATION_JSON)
213 @Produces(MediaType.APPLICATION_JSON)
214 @ApiOperation(value = "Create new component sub-category", httpMethod = "POST", notes = "Create new component sub-category for existing category")
215 @ApiResponses(value = { @ApiResponse(code = 201, message = "Subcategory created"), @ApiResponse(code = 400, message = "Invalid subcategory data"), @ApiResponse(code = 403, message = "USER_ID header is missing"),
216 @ApiResponse(code = 404, message = "Parent category wasn't found"), @ApiResponse(code = 409, message = "Subcategory already exists / User not permitted to perform the action"), @ApiResponse(code = 500, message = "General Error") })
217 public Response createComponentSubCategory(
218 @ApiParam(value = "allowed values are resources / products", allowableValues = ComponentTypeEnum.RESOURCE_PARAM_NAME + ","
219 + ComponentTypeEnum.PRODUCT_PARAM_NAME, required = true) @PathParam(value = "componentType") final String componentType,
220 @ApiParam(value = "Parent category unique ID", required = true) @PathParam(value = "categoryId") final String categoryId, @ApiParam(value = "Subcategory to be created. \ne.g. {\"name\":\"Resource-subcat\"}", required = true) String data,
221 @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
224 ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
225 SubCategoryDefinition subCategory = RepresentationUtils.fromRepresentation(data, SubCategoryDefinition.class);
227 Either<SubCategoryDefinition, ResponseFormat> createSubcategory = elementBL.createSubCategory(subCategory, componentType, categoryId, userId);
228 if (createSubcategory.isRight()) {
229 return buildErrorResponse(createSubcategory.right().value());
231 ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.CREATED);
232 return buildOkResponse(responseFormat, createSubcategory.left().value());
234 } catch (Exception e) {
235 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Create sub-category");
236 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Create sub-category");
237 log.debug("createComponentSubCategory failed with exception", e);
238 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
244 @Path("/category/{componentType}/{categoryUniqueId}/subCategory/{subCategoryUniqueId}")
245 @Consumes(MediaType.APPLICATION_JSON)
246 @Produces(MediaType.APPLICATION_JSON)
247 @ApiOperation(value = "Delete component category", httpMethod = "DELETE", notes = "Delete component category", response = Category.class)
248 @ApiResponses(value = { @ApiResponse(code = 204, message = "Category deleted"), @ApiResponse(code = 403, message = "USER_ID header is missing"), @ApiResponse(code = 409, message = "User not permitted to perform the action"),
249 @ApiResponse(code = 404, message = "Category not found"), @ApiResponse(code = 500, message = "General Error") })
250 public Response deleteComponentSubCategory(@PathParam(value = "categoryUniqueId") final String categoryUniqueId, @PathParam(value = "subCategoryUniqueId") final String subCategoryUniqueId,
251 @PathParam(value = "componentType") final String componentType, @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
254 ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
255 Either<SubCategoryDefinition, ResponseFormat> deleteSubResourceCategory = elementBL.deleteSubCategory(categoryUniqueId, subCategoryUniqueId, componentType, userId);
256 if (deleteSubResourceCategory.isRight()) {
257 return buildErrorResponse(deleteSubResourceCategory.right().value());
259 ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT);
260 return buildOkResponse(responseFormat, null);
262 } catch (Exception e) {
263 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Delete component category");
264 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Delete component category");
265 log.debug("deleteComponentSubCategory failed with exception", e);
266 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
275 @Path("/category/{componentType}/{categoryId}/subCategory/{subCategoryId}/grouping")
276 @Consumes(MediaType.APPLICATION_JSON)
277 @Produces(MediaType.APPLICATION_JSON)
278 @ApiOperation(value = "Create new component grouping", httpMethod = "POST", notes = "Create new component grouping for existing sub-category")
279 @ApiResponses(value = { @ApiResponse(code = 201, message = "Grouping created"), @ApiResponse(code = 400, message = "Invalid grouping data"), @ApiResponse(code = 403, message = "USER_ID header is missing"),
280 @ApiResponse(code = 404, message = "Parent category or subcategory were not found"), @ApiResponse(code = 409, message = "Grouping already exists / User not permitted to perform the action"),
281 @ApiResponse(code = 500, message = "General Error") })
282 public Response createComponentGrouping(@ApiParam(value = "allowed values are products", allowableValues = ComponentTypeEnum.PRODUCT_PARAM_NAME, required = true) @PathParam(value = "componentType") final String componentType,
283 @ApiParam(value = "Parent category unique ID", required = true) @PathParam(value = "categoryId") final String grandParentCategoryId,
284 @ApiParam(value = "Parent sub-category unique ID", required = true) @PathParam(value = "subCategoryId") final String parentSubCategoryId, @ApiParam(value = "Subcategory to be created", required = true) String data,
285 @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
287 ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
288 GroupingDefinition grouping = RepresentationUtils.fromRepresentation(data, GroupingDefinition.class);
290 Either<GroupingDefinition, ResponseFormat> createGrouping = elementBL.createGrouping(grouping, componentType, grandParentCategoryId, parentSubCategoryId, userId);
291 if (createGrouping.isRight()) {
292 return buildErrorResponse(createGrouping.right().value());
294 ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.CREATED);
295 return buildOkResponse(responseFormat, createGrouping.left().value());
297 } catch (Exception e) {
298 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Create grouping");
299 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Create grouping");
300 log.debug("createComponentGrouping failed with exception", e);
301 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
307 @Path("/category/{componentType}/{categoryUniqueId}/subCategory/{subCategoryUniqueId}/grouping/{groupingUniqueId}")
308 @Consumes(MediaType.APPLICATION_JSON)
309 @Produces(MediaType.APPLICATION_JSON)
310 @ApiOperation(value = "Delete component category", httpMethod = "DELETE", notes = "Delete component category", response = Category.class)
311 @ApiResponses(value = { @ApiResponse(code = 204, message = "Category deleted"), @ApiResponse(code = 403, message = "USER_ID header is missing"), @ApiResponse(code = 409, message = "User not permitted to perform the action"),
312 @ApiResponse(code = 404, message = "Category not found"), @ApiResponse(code = 500, message = "General Error") })
313 public Response deleteComponentGrouping(@PathParam(value = "categoryUniqueId") final String grandParentCategoryUniqueId, @PathParam(value = "subCategoryUniqueId") final String parentSubCategoryUniqueId,
314 @PathParam(value = "groupingUniqueId") final String groupingUniqueId, @PathParam(value = "componentType") final String componentType, @Context final HttpServletRequest request,
315 @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
318 ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
319 Either<GroupingDefinition, ResponseFormat> deleteGrouping = elementBL.deleteGrouping(grandParentCategoryUniqueId, parentSubCategoryUniqueId, groupingUniqueId, componentType, userId);
320 if (deleteGrouping.isRight()) {
321 return buildErrorResponse(deleteGrouping.right().value());
323 ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT);
324 return buildOkResponse(responseFormat, null);
326 } catch (Exception e) {
327 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Delete component grouping");
328 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Delete component grouping");
329 log.debug("deleteGrouping failed with exception", e);
330 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
335 /////////////////////////////////////////////////////////////////////////////////////////////////////
339 @Consumes(MediaType.APPLICATION_JSON)
340 @Produces(MediaType.APPLICATION_JSON)
341 @ApiOperation(value = "Retrieve all tags", httpMethod = "GET", notes = "Retrieve all tags", response = User.class)
342 @ApiResponses(value = { @ApiResponse(code = 200, message = "Returns tags Ok"), @ApiResponse(code = 404, message = "No tags were found"), @ApiResponse(code = 500, message = "Internal Server Error") })
343 public Response getTags(@Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
344 String url = request.getMethod() + " " + request.getRequestURI();
345 log.debug("(getTags) Start handle request of {}", url);
348 ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
349 Either<List<Tag>, ActionStatus> either = elementBL.getAllTags(userId);
350 if (either.isRight() || either.left().value() == null) {
351 log.debug("No tags were found");
352 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT));
354 return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), either.left().value());
356 } catch (Exception e) {
357 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Get All Tags");
358 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get All Tags");
359 log.debug("getAllTags failed with exception", e);
360 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
364 /////////////////////////////////////////////////////////////////////////////////////////////////////
365 // retrieve all property scopes
367 @Path("/propertyScopes")
368 @Consumes(MediaType.APPLICATION_JSON)
369 @Produces(MediaType.APPLICATION_JSON)
370 @ApiOperation(value = "Retrieve all propertyScopes", httpMethod = "GET", notes = "Retrieve all propertyScopes", response = User.class)
371 @ApiResponses(value = { @ApiResponse(code = 200, message = "Returns propertyScopes Ok"), @ApiResponse(code = 404, message = "No propertyScopes were found"), @ApiResponse(code = 500, message = "Internal Server Error") })
372 public Response getPropertyScopes(@Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
373 String url = request.getMethod() + " " + request.getRequestURI();
374 log.debug("(getPropertyScopes) Start handle request of {}", url);
377 ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
378 Either<List<PropertyScope>, ActionStatus> either = elementBL.getAllPropertyScopes(userId);
379 if (either.isRight() || either.left().value() == null) {
380 log.debug("No property scopes were found");
381 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT));
383 return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), either.left().value());
385 } catch (Exception e) {
386 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Get Property Scopes Categories");
387 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get Property Scopes Categories");
388 log.debug("getPropertyScopes failed with exception", e);
389 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
393 /////////////////////////////////////////////////////////////////////////////////////////////////////
394 // retrieve all artifact types
396 @Path("/artifactTypes")
397 @Consumes(MediaType.APPLICATION_JSON)
398 @Produces(MediaType.APPLICATION_JSON)
399 @ApiOperation(value = "Retrieve all artifactTypes", httpMethod = "GET", notes = "Retrieve all artifactTypes", response = User.class)
400 @ApiResponses(value = { @ApiResponse(code = 200, message = "Returns artifactTypes Ok"), @ApiResponse(code = 404, message = "No artifactTypes were found"), @ApiResponse(code = 500, message = "Internal Server Error") })
401 public Response getArtifactTypes(@Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
402 String url = request.getMethod() + " " + request.getRequestURI();
403 log.debug("(GET - getArtifactTypes) Start handle request of {}", url);
406 ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
407 Either<List<ArtifactType>, ActionStatus> either = elementBL.getAllArtifactTypes(userId);
408 if (either.isRight() || either.left().value() == null) {
409 log.debug("No artifact types were found");
410 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT));
413 Integer defaultHeatTimeout = ConfigurationManager.getConfigurationManager().getConfiguration().getDefaultHeatArtifactTimeoutMinutes();
414 ArtifactTypesInfo typesResponse = new ArtifactTypesInfo();
415 typesResponse.setArtifactTypes(either.left().value());
416 typesResponse.setHeatDefaultTimeout(defaultHeatTimeout);
418 return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), typesResponse);
420 } catch (Exception e) {
421 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Get Artifact Types");
422 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get Artifact Types");
423 log.debug("getArtifactTypes failed with exception", e);
424 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
428 /////////////////////////////////////////////////////////////////////////////////////////////////////
429 // retrieve all artifact types
431 @Path("/configuration/ui")
432 @Consumes(MediaType.APPLICATION_JSON)
433 @Produces(MediaType.APPLICATION_JSON)
434 @ApiOperation(value = "Retrieve all artifactTypes", httpMethod = "GET", notes = "Retrieve all artifactTypes", response = User.class)
435 @ApiResponses(value = { @ApiResponse(code = 200, message = "Returns artifactTypes Ok"), @ApiResponse(code = 404, message = "No artifactTypes were found"), @ApiResponse(code = 500, message = "Internal Server Error") })
436 public Response getConfiguration(@Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
437 String url = request.getMethod() + " " + request.getRequestURI();
438 log.debug("(getConfiguration) Start handle request of {}", url);
441 ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
442 Either<List<ArtifactType>, ActionStatus> otherEither = elementBL.getAllArtifactTypes(userId);
443 Either<Integer, ActionStatus> defaultHeatTimeout = elementBL.getDefaultHeatTimeout();
444 Either<Map<String, Object>, ActionStatus> deploymentEither = elementBL.getAllDeploymentArtifactTypes();
445 Either<Map<String, String>, ActionStatus> resourceTypesMap = elementBL.getResourceTypesMap();
447 if (otherEither.isRight() || otherEither.left().value() == null) {
448 log.debug("No other artifact types were found");
449 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT));
450 } else if (deploymentEither.isRight() || deploymentEither.left().value() == null) {
451 log.debug("No deployment artifact types were found");
452 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT));
453 } else if (defaultHeatTimeout.isRight() || defaultHeatTimeout.left().value() == null) {
454 log.debug("heat default timeout was not found");
455 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT));
456 } else if (resourceTypesMap.isRight() || resourceTypesMap.left().value() == null) {
457 log.debug("No resource types were found");
458 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT));
460 Map<String, Object> artifacts = new HashMap<String, Object>();
461 Map<String, Object> configuration = new HashMap<String, Object>();
463 artifacts.put("other", otherEither.left().value());
464 artifacts.put("deployment", deploymentEither.left().value());
465 configuration.put("artifacts", artifacts);
466 configuration.put("defaultHeatTimeout", defaultHeatTimeout.left().value());
467 configuration.put("componentTypes", elementBL.getAllComponentTypesParamNames());
468 configuration.put("roles", elementBL.getAllSupportedRoles());
469 configuration.put("resourceTypes", resourceTypesMap.left().value());
470 return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), configuration);
473 } catch (Exception e) {
474 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Get Artifact Types");
475 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get Artifact Types");
476 log.debug("getArtifactTypes failed with exception", e);
477 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
481 /////////////////////////////////////////////////////////////////////////////////////////////////////
482 // retrieve all followed resources and services
485 @Consumes(MediaType.APPLICATION_JSON)
486 @Produces(MediaType.APPLICATION_JSON)
487 @ApiOperation(value = "Retrieve all followed", httpMethod = "GET", notes = "Retrieve all followed", response = User.class)
488 @ApiResponses(value = { @ApiResponse(code = 200, message = "Returns followed Ok"), @ApiResponse(code = 404, message = "No followed were found"), @ApiResponse(code = 404, message = "User not found"),
489 @ApiResponse(code = 500, message = "Internal Server Error") })
490 public Response getFollowedResourcesServices(@Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
493 User userData = null;
495 String url = request.getMethod() + " " + request.getRequestURI();
496 log.debug("Start handle request of {}", url);
497 UserBusinessLogic userAdminManager = getUserAdminManager(request.getSession().getServletContext());
500 Either<User, ActionStatus> either = userAdminManager.getUser(userId, false);
501 if (either.isRight()) {
502 // Couldn't find or otherwise fetch the user
503 return buildErrorResponse(getComponentsUtils().getResponseFormatByUserId(either.right().value(), userId));
506 if (either.left().value() != null) {
507 userData = either.left().value();
508 Either<Map<String, List<? extends Component>>, ResponseFormat> followedResourcesServices = getElementBL(request.getSession().getServletContext()).getFollowed(userData);
510 // buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK),
511 // followedResourcesServices.left().value());
512 if (followedResourcesServices.isRight()) {
513 log.debug("failed to get followed resources services ");
514 return buildErrorResponse(followedResourcesServices.right().value());
516 Object data = RepresentationUtils.toRepresentation(followedResourcesServices.left().value());
517 res = buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), data);
519 res = buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
521 } catch (Exception e) {
522 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Get Followed Resources / Services Categories");
523 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get Followed Resources / Services Categories");
524 log.debug("Getting followed resources/services failed with exception", e);
525 res = buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
530 /////////////////////////////////////////////////////////////////////////////////////////////////////
531 // retrieve all certified resources and services and their last version
534 @Consumes(MediaType.APPLICATION_JSON)
535 @Produces(MediaType.APPLICATION_JSON)
536 @ApiOperation(value = "Retrieve catalog resources and services", httpMethod = "GET", notes = "Retrieve catalog resources and services", response = User.class)
537 @ApiResponses(value = { @ApiResponse(code = 200, message = "Returns resources and services Ok"), @ApiResponse(code = 404, message = "No resources and services were found"), @ApiResponse(code = 404, message = "User not found"),
538 @ApiResponse(code = 500, message = "Internal Server Error") })
539 public Response getCatalogComponents(@Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId, @QueryParam("excludeTypes") List<OriginTypeEnum> excludeTypes) {
543 String url = request.getMethod() + " " + request.getRequestURI();
544 log.debug("Start handle request of {}", url);
546 Either<Map<String, List<? extends Component>>, ResponseFormat> catalogData = getElementBL(request.getSession().getServletContext()).getCatalogComponents(userId, excludeTypes);
548 if (catalogData.isRight()) {
549 log.debug("failed to get catalog data");
550 return buildErrorResponse(catalogData.right().value());
552 Object data = RepresentationUtils.toRepresentation(catalogData.left().value());
553 res = buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), data);
555 } catch (Exception e) {
556 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Get Catalog Components");
557 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get Catalog Components");
558 log.debug("Getting catalog components failed with exception", e);
559 res = buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
565 @Path("/inactiveComponents/{componentType}")
566 public Response deleteMarkedResources(@PathParam("componentType") final String componentType, @Context final HttpServletRequest request) {
568 ServletContext context = request.getSession().getServletContext();
570 String url = request.getMethod() + " " + request.getRequestURI();
571 log.debug("Start handle request of {}", url);
574 String userId = request.getHeader(Constants.USER_ID_HEADER);
575 User modifier = new User();
576 modifier.setUserId(userId);
577 log.debug("modifier id is {}", userId);
579 Response response = null;
581 NodeTypeEnum nodeType = NodeTypeEnum.getByNameIgnoreCase(componentType);
582 if (nodeType == null) {
583 log.info("componentType is not valid: {]", componentType);
584 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.INVALID_CONTENT));
587 List<NodeTypeEnum> componentsList = new ArrayList<NodeTypeEnum>();
588 componentsList.add(nodeType);
590 ComponentsCleanBusinessLogic businessLogic = getComponentCleanerBL(context);
591 Map<NodeTypeEnum, Either<List<String>, ResponseFormat>> cleanComponentsResult = businessLogic.cleanComponents(componentsList);
592 Either<List<String>, ResponseFormat> cleanResult = cleanComponentsResult.get(nodeType);
594 if (cleanResult.isRight()) {
595 log.debug("failed to delete marked components of type {}", nodeType);
596 response = buildErrorResponse(cleanResult.right().value());
599 response = buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), cleanResult.left().value());
602 } catch (Exception e) {
603 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Delete Marked Components");
604 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Delete Marked Components");
605 log.debug("delete marked components failed with exception", e);
606 response = buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
613 @Path("/ecompPortalMenu")
614 @Consumes(MediaType.APPLICATION_JSON)
615 @Produces(MediaType.APPLICATION_JSON)
616 @ApiOperation(value = "Retrieve ecomp portal menu - MOC", httpMethod = "GET", notes = "Retrieve ecomp portal menu", response = User.class)
617 @ApiResponses(value = { @ApiResponse(code = 200, message = "Retrieve ecomp portal menu") })
618 public Response getListOfCsars(@Context final HttpServletRequest request) {
619 return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK),
620 "[{\"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}]}]}]");