2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.openecomp.sdc.be.servlets;
23 import java.util.ArrayList;
24 import java.util.HashMap;
25 import java.util.List;
28 import javax.inject.Singleton;
29 import javax.servlet.ServletContext;
30 import javax.servlet.http.HttpServletRequest;
31 import javax.ws.rs.Consumes;
32 import javax.ws.rs.DELETE;
33 import javax.ws.rs.GET;
34 import javax.ws.rs.HeaderParam;
35 import javax.ws.rs.POST;
36 import javax.ws.rs.Path;
37 import javax.ws.rs.PathParam;
38 import javax.ws.rs.Produces;
39 import javax.ws.rs.QueryParam;
40 import javax.ws.rs.core.Context;
41 import javax.ws.rs.core.MediaType;
42 import javax.ws.rs.core.Response;
44 import org.openecomp.sdc.be.components.clean.ComponentsCleanBusinessLogic;
45 import org.openecomp.sdc.be.components.impl.ElementBusinessLogic;
46 import org.openecomp.sdc.be.config.BeEcompErrorManager;
47 import org.openecomp.sdc.be.config.ConfigurationManager;
48 import org.openecomp.sdc.be.dao.api.ActionStatus;
49 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
50 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
51 import org.openecomp.sdc.be.datatypes.enums.OriginTypeEnum;
52 import org.openecomp.sdc.be.info.ArtifactTypesInfo;
53 import org.openecomp.sdc.be.model.ArtifactType;
54 import org.openecomp.sdc.be.model.Category;
55 import org.openecomp.sdc.be.model.Component;
56 import org.openecomp.sdc.be.model.PropertyScope;
57 import org.openecomp.sdc.be.model.Tag;
58 import org.openecomp.sdc.be.model.User;
59 import org.openecomp.sdc.be.model.category.CategoryDefinition;
60 import org.openecomp.sdc.be.model.category.GroupingDefinition;
61 import org.openecomp.sdc.be.model.category.SubCategoryDefinition;
62 import org.openecomp.sdc.be.ui.model.UiCategories;
63 import org.openecomp.sdc.be.user.UserBusinessLogic;
64 import org.openecomp.sdc.common.api.Constants;
65 import org.openecomp.sdc.common.config.EcompErrorName;
66 import org.openecomp.sdc.exception.ResponseFormat;
67 import org.slf4j.Logger;
68 import org.slf4j.LoggerFactory;
70 import com.jcabi.aspects.Loggable;
72 import fj.data.Either;
73 import io.swagger.annotations.Api;
74 import io.swagger.annotations.ApiOperation;
75 import io.swagger.annotations.ApiParam;
76 import io.swagger.annotations.ApiResponse;
77 import io.swagger.annotations.ApiResponses;
83 * UI oriented servlet - to return elements in specific format UI needs
87 @Loggable(prepend = true, value = Loggable.DEBUG, trim = false)
88 @Api(value = "Element Servlet", description = "Element Servlet")
90 public class ElementServlet extends BeGenericServlet {
92 private static Logger log = LoggerFactory.getLogger(ElementServlet.class.getName());
95 ******************************************************************************
96 * NEW CATEGORIES category / \ subcategory subcategory / grouping
97 ******************************************************************************/
104 /////////////////////////////////////////////////////////////////////////////////////////////////////
105 // retrieve all component categories
107 @Path("/categories/{componentType}")
108 @Consumes(MediaType.APPLICATION_JSON)
109 @Produces(MediaType.APPLICATION_JSON)
110 @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)
111 @ApiResponses(value = { @ApiResponse(code = 200, message = "Returns categories Ok"), @ApiResponse(code = 403, message = "Missing information"), @ApiResponse(code = 400, message = "Invalid component type"),
112 @ApiResponse(code = 409, message = "Restricted operation"), @ApiResponse(code = 500, message = "Internal Server Error") })
113 public Response getComponentCategories(@ApiParam(value = "allowed values are resources / services/ products", allowableValues = ComponentTypeEnum.RESOURCE_PARAM_NAME + "," + ComponentTypeEnum.SERVICE_PARAM_NAME + ","
114 + ComponentTypeEnum.PRODUCT_PARAM_NAME, required = true) @PathParam(value = "componentType") final String componentType, @HeaderParam(value = Constants.USER_ID_HEADER) String userId, @Context final HttpServletRequest request) {
117 ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
118 Either<List<CategoryDefinition>, ResponseFormat> either = elementBL.getAllCategories(componentType, userId);
119 if (either.isRight()) {
120 log.debug("No categories were found for type {}", componentType);
121 return buildErrorResponse(either.right().value());
123 return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), either.left().value());
125 } catch (Exception e) {
126 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Get Component Categories");
127 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get Component Categories");
128 log.debug("getComponentCategories failed with exception", e);
129 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
135 @Consumes(MediaType.APPLICATION_JSON)
136 @Produces(MediaType.APPLICATION_JSON)
137 @ApiOperation(value = "Retrieve the all resource, service and product categories", httpMethod = "GET", notes = "Retrieve the all resource, service and product categories", response = Response.class)
138 @ApiResponses(value = { @ApiResponse(code = 200, message = "Returns categories Ok"), @ApiResponse(code = 403, message = "Missing information"),
139 @ApiResponse(code = 409, message = "Restricted operation"), @ApiResponse(code = 500, message = "Internal Server Error") })
140 public Response getAllCategories(@Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
143 ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
144 Either<UiCategories, ResponseFormat> either = elementBL.getAllCategories(userId);
145 if (either.isRight()) {
146 log.debug("No categories were found");
147 return buildErrorResponse(either.right().value());
149 return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), either.left().value());
151 } catch (Exception e) {
152 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Get All Categories");
153 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get All Categories");
154 log.debug("getAllCategories failed with exception", e);
155 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
161 @Path("/category/{componentType}")
162 @Consumes(MediaType.APPLICATION_JSON)
163 @Produces(MediaType.APPLICATION_JSON)
164 @ApiOperation(value = "Create new component category", httpMethod = "POST", notes = "Create new component category")
165 @ApiResponses(value = { @ApiResponse(code = 201, message = "Category created"), @ApiResponse(code = 400, message = "Invalid category data"), @ApiResponse(code = 403, message = "USER_ID header is missing"),
166 @ApiResponse(code = 409, message = "Category already exists / User not permitted to perform the action"), @ApiResponse(code = 500, message = "General Error") })
167 public Response createComponentCategory(
168 @ApiParam(value = "allowed values are resources /services / products", allowableValues = ComponentTypeEnum.RESOURCE_PARAM_NAME + "," + ComponentTypeEnum.SERVICE_PARAM_NAME + ","
169 + ComponentTypeEnum.PRODUCT_PARAM_NAME, required = true) @PathParam(value = "componentType") final String componentType,
170 @ApiParam(value = "Category to be created", required = true) String data, @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
172 ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
173 CategoryDefinition category = RepresentationUtils.fromRepresentation(data, CategoryDefinition.class);
175 Either<CategoryDefinition, ResponseFormat> createResourceCategory = elementBL.createCategory(category, componentType, userId);
176 if (createResourceCategory.isRight()) {
177 return buildErrorResponse(createResourceCategory.right().value());
180 ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.CREATED);
181 return buildOkResponse(responseFormat, createResourceCategory.left().value());
183 } catch (Exception e) {
184 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Create resource category");
185 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Create resource category");
186 log.debug("createResourceCategory failed with exception", e);
187 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
193 @Path("/category/{componentType}/{categoryUniqueId}")
194 @Consumes(MediaType.APPLICATION_JSON)
195 @Produces(MediaType.APPLICATION_JSON)
196 @ApiOperation(value = "Delete component category", httpMethod = "DELETE", notes = "Delete component category", response = Category.class)
197 @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"),
198 @ApiResponse(code = 404, message = "Category not found"), @ApiResponse(code = 500, message = "General Error") })
199 public Response deleteComponentCategory(@PathParam(value = "categoryUniqueId") final String categoryUniqueId, @PathParam(value = "componentType") final String componentType, @Context final HttpServletRequest request,
200 @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
203 ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
204 Either<CategoryDefinition, ResponseFormat> createResourceCategory = elementBL.deleteCategory(categoryUniqueId, componentType, userId);
206 if (createResourceCategory.isRight()) {
207 return buildErrorResponse(createResourceCategory.right().value());
209 ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT);
210 return buildOkResponse(responseFormat, null);
212 } catch (Exception e) {
213 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Create resource category");
214 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Create resource category");
215 log.debug("createResourceCategory failed with exception", e);
216 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
229 @Path("/category/{componentType}/{categoryId}/subCategory")
230 @Consumes(MediaType.APPLICATION_JSON)
231 @Produces(MediaType.APPLICATION_JSON)
232 @ApiOperation(value = "Create new component sub-category", httpMethod = "POST", notes = "Create new component sub-category for existing category")
233 @ApiResponses(value = { @ApiResponse(code = 201, message = "Subcategory created"), @ApiResponse(code = 400, message = "Invalid subcategory data"), @ApiResponse(code = 403, message = "USER_ID header is missing"),
234 @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") })
235 public Response createComponentSubCategory(
236 @ApiParam(value = "allowed values are resources / products", allowableValues = ComponentTypeEnum.RESOURCE_PARAM_NAME + ","
237 + ComponentTypeEnum.PRODUCT_PARAM_NAME, required = true) @PathParam(value = "componentType") final String componentType,
238 @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,
239 @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
242 ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
243 SubCategoryDefinition subCategory = RepresentationUtils.fromRepresentation(data, SubCategoryDefinition.class);
245 Either<SubCategoryDefinition, ResponseFormat> createSubcategory = elementBL.createSubCategory(subCategory, componentType, categoryId, userId);
246 if (createSubcategory.isRight()) {
247 return buildErrorResponse(createSubcategory.right().value());
249 ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.CREATED);
250 return buildOkResponse(responseFormat, createSubcategory.left().value());
252 } catch (Exception e) {
253 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Create sub-category");
254 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Create sub-category");
255 log.debug("createComponentSubCategory failed with exception", e);
256 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
262 @Path("/category/{componentType}/{categoryUniqueId}/subCategory/{subCategoryUniqueId}")
263 @Consumes(MediaType.APPLICATION_JSON)
264 @Produces(MediaType.APPLICATION_JSON)
265 @ApiOperation(value = "Delete component category", httpMethod = "DELETE", notes = "Delete component category", response = Category.class)
266 @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"),
267 @ApiResponse(code = 404, message = "Category not found"), @ApiResponse(code = 500, message = "General Error") })
268 public Response deleteComponentSubCategory(@PathParam(value = "categoryUniqueId") final String categoryUniqueId, @PathParam(value = "subCategoryUniqueId") final String subCategoryUniqueId,
269 @PathParam(value = "componentType") final String componentType, @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
272 ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
273 Either<SubCategoryDefinition, ResponseFormat> deleteSubResourceCategory = elementBL.deleteSubCategory(categoryUniqueId, subCategoryUniqueId, componentType, userId);
274 if (deleteSubResourceCategory.isRight()) {
275 return buildErrorResponse(deleteSubResourceCategory.right().value());
277 ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT);
278 return buildOkResponse(responseFormat, null);
280 } catch (Exception e) {
281 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Delete component category");
282 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Delete component category");
283 log.debug("deleteComponentSubCategory failed with exception", e);
284 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
293 @Path("/category/{componentType}/{categoryId}/subCategory/{subCategoryId}/grouping")
294 @Consumes(MediaType.APPLICATION_JSON)
295 @Produces(MediaType.APPLICATION_JSON)
296 @ApiOperation(value = "Create new component grouping", httpMethod = "POST", notes = "Create new component grouping for existing sub-category")
297 @ApiResponses(value = { @ApiResponse(code = 201, message = "Grouping created"), @ApiResponse(code = 400, message = "Invalid grouping data"), @ApiResponse(code = 403, message = "USER_ID header is missing"),
298 @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"),
299 @ApiResponse(code = 500, message = "General Error") })
300 public Response createComponentGrouping(@ApiParam(value = "allowed values are products", allowableValues = ComponentTypeEnum.PRODUCT_PARAM_NAME, required = true) @PathParam(value = "componentType") final String componentType,
301 @ApiParam(value = "Parent category unique ID", required = true) @PathParam(value = "categoryId") final String grandParentCategoryId,
302 @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,
303 @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
305 ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
306 GroupingDefinition grouping = RepresentationUtils.fromRepresentation(data, GroupingDefinition.class);
308 Either<GroupingDefinition, ResponseFormat> createGrouping = elementBL.createGrouping(grouping, componentType, grandParentCategoryId, parentSubCategoryId, userId);
309 if (createGrouping.isRight()) {
310 return buildErrorResponse(createGrouping.right().value());
312 ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.CREATED);
313 return buildOkResponse(responseFormat, createGrouping.left().value());
315 } catch (Exception e) {
316 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Create grouping");
317 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Create grouping");
318 log.debug("createComponentGrouping failed with exception", e);
319 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
325 @Path("/category/{componentType}/{categoryUniqueId}/subCategory/{subCategoryUniqueId}/grouping/{groupingUniqueId}")
326 @Consumes(MediaType.APPLICATION_JSON)
327 @Produces(MediaType.APPLICATION_JSON)
328 @ApiOperation(value = "Delete component category", httpMethod = "DELETE", notes = "Delete component category", response = Category.class)
329 @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"),
330 @ApiResponse(code = 404, message = "Category not found"), @ApiResponse(code = 500, message = "General Error") })
331 public Response deleteComponentGrouping(@PathParam(value = "categoryUniqueId") final String grandParentCategoryUniqueId, @PathParam(value = "subCategoryUniqueId") final String parentSubCategoryUniqueId,
332 @PathParam(value = "groupingUniqueId") final String groupingUniqueId, @PathParam(value = "componentType") final String componentType, @Context final HttpServletRequest request,
333 @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
336 ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
337 Either<GroupingDefinition, ResponseFormat> deleteGrouping = elementBL.deleteGrouping(grandParentCategoryUniqueId, parentSubCategoryUniqueId, groupingUniqueId, componentType, userId);
338 if (deleteGrouping.isRight()) {
339 return buildErrorResponse(deleteGrouping.right().value());
341 ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT);
342 return buildOkResponse(responseFormat, null);
344 } catch (Exception e) {
345 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Delete component grouping");
346 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Delete component grouping");
347 log.debug("deleteGrouping failed with exception", e);
348 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
353 /////////////////////////////////////////////////////////////////////////////////////////////////////
357 @Consumes(MediaType.APPLICATION_JSON)
358 @Produces(MediaType.APPLICATION_JSON)
359 @ApiOperation(value = "Retrieve all tags", httpMethod = "GET", notes = "Retrieve all tags", response = User.class)
360 @ApiResponses(value = { @ApiResponse(code = 200, message = "Returns tags Ok"), @ApiResponse(code = 404, message = "No tags were found"), @ApiResponse(code = 500, message = "Internal Server Error") })
361 public Response getTags(@Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
362 String url = request.getMethod() + " " + request.getRequestURI();
363 log.debug("(getTags) Start handle request of {}", url);
366 ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
367 Either<List<Tag>, ActionStatus> either = elementBL.getAllTags(userId);
368 if (either.isRight() || either.left().value() == null) {
369 log.debug("No tags were found");
370 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT));
372 return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), either.left().value());
374 } catch (Exception e) {
375 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Get All Tags");
376 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get All Tags");
377 log.debug("getAllTags failed with exception", e);
378 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
382 /////////////////////////////////////////////////////////////////////////////////////////////////////
383 // retrieve all property scopes
385 @Path("/propertyScopes")
386 @Consumes(MediaType.APPLICATION_JSON)
387 @Produces(MediaType.APPLICATION_JSON)
388 @ApiOperation(value = "Retrieve all propertyScopes", httpMethod = "GET", notes = "Retrieve all propertyScopes", response = User.class)
389 @ApiResponses(value = { @ApiResponse(code = 200, message = "Returns propertyScopes Ok"), @ApiResponse(code = 404, message = "No propertyScopes were found"), @ApiResponse(code = 500, message = "Internal Server Error") })
390 public Response getPropertyScopes(@Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
391 String url = request.getMethod() + " " + request.getRequestURI();
392 log.debug("(getPropertyScopes) Start handle request of {}", url);
395 ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
396 Either<List<PropertyScope>, ActionStatus> either = elementBL.getAllPropertyScopes(userId);
397 if (either.isRight() || either.left().value() == null) {
398 log.debug("No property scopes were found");
399 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT));
401 return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), either.left().value());
403 } catch (Exception e) {
404 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Get Property Scopes Categories");
405 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get Property Scopes Categories");
406 log.debug("getPropertyScopes failed with exception", e);
407 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
411 /////////////////////////////////////////////////////////////////////////////////////////////////////
412 // retrieve all artifact types
414 @Path("/artifactTypes")
415 @Consumes(MediaType.APPLICATION_JSON)
416 @Produces(MediaType.APPLICATION_JSON)
417 @ApiOperation(value = "Retrieve all artifactTypes", httpMethod = "GET", notes = "Retrieve all artifactTypes", response = User.class)
418 @ApiResponses(value = { @ApiResponse(code = 200, message = "Returns artifactTypes Ok"), @ApiResponse(code = 404, message = "No artifactTypes were found"), @ApiResponse(code = 500, message = "Internal Server Error") })
419 public Response getArtifactTypes(@Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
420 String url = request.getMethod() + " " + request.getRequestURI();
421 log.debug("(GET - getArtifactTypes) Start handle request of {}", url);
424 ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
425 Either<List<ArtifactType>, ActionStatus> either = elementBL.getAllArtifactTypes(userId);
426 if (either.isRight() || either.left().value() == null) {
427 log.debug("No artifact types were found");
428 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT));
431 Integer defaultHeatTimeout = ConfigurationManager.getConfigurationManager().getConfiguration().getDefaultHeatArtifactTimeoutMinutes();
432 ArtifactTypesInfo typesResponse = new ArtifactTypesInfo();
433 typesResponse.setArtifactTypes(either.left().value());
434 typesResponse.setHeatDefaultTimeout(defaultHeatTimeout);
436 return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), typesResponse);
438 } catch (Exception e) {
439 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Get Artifact Types");
440 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get Artifact Types");
441 log.debug("getArtifactTypes failed with exception", e);
442 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
446 /////////////////////////////////////////////////////////////////////////////////////////////////////
447 // retrieve all artifact types
449 @Path("/configuration/ui")
450 @Consumes(MediaType.APPLICATION_JSON)
451 @Produces(MediaType.APPLICATION_JSON)
452 @ApiOperation(value = "Retrieve all artifactTypes", httpMethod = "GET", notes = "Retrieve all artifactTypes", response = User.class)
453 @ApiResponses(value = { @ApiResponse(code = 200, message = "Returns artifactTypes Ok"), @ApiResponse(code = 404, message = "No artifactTypes were found"), @ApiResponse(code = 500, message = "Internal Server Error") })
454 public Response getConfiguration(@Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
455 String url = request.getMethod() + " " + request.getRequestURI();
456 log.debug("(getConfiguration) Start handle request of {}", url);
459 ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
460 Either<List<ArtifactType>, ActionStatus> otherEither = elementBL.getAllArtifactTypes(userId);
461 Either<Integer, ActionStatus> defaultHeatTimeout = elementBL.getDefaultHeatTimeout();
462 Either<Map<String, Object>, ActionStatus> deploymentEither = elementBL.getAllDeploymentArtifactTypes();
463 Either<Map<String, String>, ActionStatus> resourceTypesMap = elementBL.getResourceTypesMap();
465 if (otherEither.isRight() || otherEither.left().value() == null) {
466 log.debug("No other artifact types were found");
467 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT));
468 } else if (deploymentEither.isRight() || deploymentEither.left().value() == null) {
469 log.debug("No deployment artifact types were found");
470 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT));
471 } else if (defaultHeatTimeout.isRight() || defaultHeatTimeout.left().value() == null) {
472 log.debug("heat default timeout was not found");
473 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT));
474 } else if (resourceTypesMap.isRight() || resourceTypesMap.left().value() == null) {
475 log.debug("No resource types were found");
476 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT));
478 Map<String, Object> artifacts = new HashMap<String, Object>();
479 Map<String, Object> configuration = new HashMap<String, Object>();
481 artifacts.put("other", otherEither.left().value());
482 artifacts.put("deployment", deploymentEither.left().value());
483 configuration.put("artifacts", artifacts);
484 configuration.put("defaultHeatTimeout", defaultHeatTimeout.left().value());
485 configuration.put("componentTypes", elementBL.getAllComponentTypesParamNames());
486 configuration.put("roles", elementBL.getAllSupportedRoles());
487 configuration.put("resourceTypes", resourceTypesMap.left().value());
488 configuration.put("environmentContext", ConfigurationManager.getConfigurationManager().getConfiguration().getEnvironmentContext());
489 return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), configuration);
492 } catch (Exception e) {
493 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Get Artifact Types");
494 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get Artifact Types");
495 log.debug("getArtifactTypes failed with exception", e);
496 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
500 /////////////////////////////////////////////////////////////////////////////////////////////////////
501 // retrieve all followed resources and services
504 @Consumes(MediaType.APPLICATION_JSON)
505 @Produces(MediaType.APPLICATION_JSON)
506 @ApiOperation(value = "Retrieve all followed", httpMethod = "GET", notes = "Retrieve all followed", response = User.class)
507 @ApiResponses(value = { @ApiResponse(code = 200, message = "Returns followed Ok"), @ApiResponse(code = 404, message = "No followed were found"), @ApiResponse(code = 404, message = "User not found"),
508 @ApiResponse(code = 500, message = "Internal Server Error") })
509 public Response getFollowedResourcesServices(@Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
512 User userData = null;
514 String url = request.getMethod() + " " + request.getRequestURI();
515 log.debug("Start handle request of {}", url);
516 UserBusinessLogic userAdminManager = getUserAdminManager(request.getSession().getServletContext());
519 Either<User, ActionStatus> either = userAdminManager.getUser(userId, false);
520 if (either.isRight()) {
521 // Couldn't find or otherwise fetch the user
522 return buildErrorResponse(getComponentsUtils().getResponseFormatByUserId(either.right().value(), userId));
525 if (either.left().value() != null) {
526 userData = either.left().value();
527 Either<Map<String, List<? extends Component>>, ResponseFormat> followedResourcesServices = getElementBL(request.getSession().getServletContext()).getFollowed(userData);
529 // buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK),
530 // followedResourcesServices.left().value());
531 if (followedResourcesServices.isRight()) {
532 log.debug("failed to get followed resources services ");
533 return buildErrorResponse(followedResourcesServices.right().value());
535 Object data = RepresentationUtils.toRepresentation(followedResourcesServices.left().value());
536 res = buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), data);
538 res = buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
540 } catch (Exception e) {
541 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Get Followed Resources / Services Categories");
542 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get Followed Resources / Services Categories");
543 log.debug("Getting followed resources/services failed with exception", e);
544 res = buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
549 /////////////////////////////////////////////////////////////////////////////////////////////////////
550 // retrieve all certified resources and services and their last version
553 @Consumes(MediaType.APPLICATION_JSON)
554 @Produces(MediaType.APPLICATION_JSON)
555 @ApiOperation(value = "Retrieve catalog resources and services", httpMethod = "GET", notes = "Retrieve catalog resources and services", response = User.class)
556 @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"),
557 @ApiResponse(code = 500, message = "Internal Server Error") })
558 public Response getCatalogComponents(@Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId, @QueryParam("excludeTypes") List<OriginTypeEnum> excludeTypes) {
562 String url = request.getMethod() + " " + request.getRequestURI();
563 log.debug("Start handle request of {}", url);
565 Either<Map<String, List<? extends Component>>, ResponseFormat> catalogData = getElementBL(request.getSession().getServletContext()).getCatalogComponents(userId, excludeTypes);
567 if (catalogData.isRight()) {
568 log.debug("failed to get catalog data");
569 return buildErrorResponse(catalogData.right().value());
571 Object data = RepresentationUtils.toRepresentation(catalogData.left().value());
572 res = buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), data);
574 } catch (Exception e) {
575 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Get Catalog Components");
576 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get Catalog Components");
577 log.debug("Getting catalog components failed with exception", e);
578 res = buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
584 @Path("/inactiveComponents/{componentType}")
585 public Response deleteMarkedResources(@PathParam("componentType") final String componentType, @Context final HttpServletRequest request) {
587 ServletContext context = request.getSession().getServletContext();
589 String url = request.getMethod() + " " + request.getRequestURI();
590 log.debug("Start handle request of {}", url);
593 String userId = request.getHeader(Constants.USER_ID_HEADER);
594 User modifier = new User();
595 modifier.setUserId(userId);
596 log.debug("modifier id is {}", userId);
598 Response response = null;
600 NodeTypeEnum nodeType = NodeTypeEnum.getByNameIgnoreCase(componentType);
601 if (nodeType == null) {
602 log.info("componentType is not valid: {]", componentType);
603 return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.INVALID_CONTENT));
606 List<NodeTypeEnum> componentsList = new ArrayList<NodeTypeEnum>();
607 componentsList.add(nodeType);
609 ComponentsCleanBusinessLogic businessLogic = getComponentCleanerBL(context);
610 Map<NodeTypeEnum, Either<List<String>, ResponseFormat>> cleanComponentsResult = businessLogic.cleanComponents(componentsList);
611 Either<List<String>, ResponseFormat> cleanResult = cleanComponentsResult.get(nodeType);
613 if (cleanResult.isRight()) {
614 log.debug("failed to delete marked components of type {}", nodeType);
615 response = buildErrorResponse(cleanResult.right().value());
618 response = buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), cleanResult.left().value());
621 } catch (Exception e) {
622 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Delete Marked Components");
623 BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Delete Marked Components");
624 log.debug("delete marked components failed with exception", e);
625 response = buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
632 @Path("/ecompPortalMenu")
633 @Consumes(MediaType.APPLICATION_JSON)
634 @Produces(MediaType.APPLICATION_JSON)
635 @ApiOperation(value = "Retrieve ONAP portal menu - MOC", httpMethod = "GET", notes = "Retrieve ONAP portal menu", response = User.class)
636 @ApiResponses(value = { @ApiResponse(code = 200, message = "Retrieve ONAP portal menu") })
637 public Response getListOfCsars(@Context final HttpServletRequest request) {
638 return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK),
639 "[{\"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}]}]}]");