7a423603550c397c05cf2c9bea7020dfcb6f42ae
[sdc.git] / catalog-be / src / main / java / org / openecomp / sdc / be / servlets / ElementServlet.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
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
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
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=========================================================
19  */
20
21 package org.openecomp.sdc.be.servlets;
22
23 import java.util.ArrayList;
24 import java.util.HashMap;
25 import java.util.List;
26 import java.util.Map;
27
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;
43
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;
69
70 import com.jcabi.aspects.Loggable;
71
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;
78
79 @Path("/v1/")
80
81 /****
82  * 
83  * UI oriented servlet - to return elements in specific format UI needs
84  * 
85  *
86  */
87 @Loggable(prepend = true, value = Loggable.DEBUG, trim = false)
88 @Api(value = "Element Servlet", description = "Element Servlet")
89 @Singleton
90 public class ElementServlet extends BeGenericServlet {
91
92         private static Logger log = LoggerFactory.getLogger(ElementServlet.class.getName());
93
94         /*
95          ******************************************************************************
96          * NEW CATEGORIES category / \ subcategory subcategory / grouping
97          ******************************************************************************/
98
99         /*
100          *
101          * 
102          * CATEGORIES
103          */
104         /////////////////////////////////////////////////////////////////////////////////////////////////////
105         // retrieve all component categories
106         @GET
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) {
115
116                 try {
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());
122                         } else {
123                                 return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), either.left().value());
124                         }
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));
130                 }
131         }
132         
133         @GET
134         @Path("/categories")
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) {
141
142                 try {
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());
148                         } else {
149                                 return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), either.left().value());
150                         }
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));
156                 }
157         }
158
159
160         @POST
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) {
171                 try {
172                         ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
173                         CategoryDefinition category = RepresentationUtils.fromRepresentation(data, CategoryDefinition.class);
174
175                         Either<CategoryDefinition, ResponseFormat> createResourceCategory = elementBL.createCategory(category, componentType, userId);
176                         if (createResourceCategory.isRight()) {
177                                 return buildErrorResponse(createResourceCategory.right().value());
178                         }
179
180                         ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.CREATED);
181                         return buildOkResponse(responseFormat, createResourceCategory.left().value());
182
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));
188
189                 }
190         }
191
192         @DELETE
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) {
201
202                 try {
203                         ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
204                         Either<CategoryDefinition, ResponseFormat> createResourceCategory = elementBL.deleteCategory(categoryUniqueId, componentType, userId);
205
206                         if (createResourceCategory.isRight()) {
207                                 return buildErrorResponse(createResourceCategory.right().value());
208                         }
209                         ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT);
210                         return buildOkResponse(responseFormat, null);
211
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));
217
218                 }
219         }
220
221         /*
222          * 
223          * 
224          * SUBCATEGORIES
225          * 
226          */
227
228         @POST
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) {
240
241                 try {
242                         ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
243                         SubCategoryDefinition subCategory = RepresentationUtils.fromRepresentation(data, SubCategoryDefinition.class);
244
245                         Either<SubCategoryDefinition, ResponseFormat> createSubcategory = elementBL.createSubCategory(subCategory, componentType, categoryId, userId);
246                         if (createSubcategory.isRight()) {
247                                 return buildErrorResponse(createSubcategory.right().value());
248                         }
249                         ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.CREATED);
250                         return buildOkResponse(responseFormat, createSubcategory.left().value());
251
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));
257
258                 }
259         }
260
261         @DELETE
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) {
270
271                 try {
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());
276                         }
277                         ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT);
278                         return buildOkResponse(responseFormat, null);
279
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));
285
286                 }
287         }
288
289         /*
290          * GROUPINGS
291          */
292         @POST
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) {
304                 try {
305                         ElementBusinessLogic elementBL = getElementBL(request.getSession().getServletContext());
306                         GroupingDefinition grouping = RepresentationUtils.fromRepresentation(data, GroupingDefinition.class);
307
308                         Either<GroupingDefinition, ResponseFormat> createGrouping = elementBL.createGrouping(grouping, componentType, grandParentCategoryId, parentSubCategoryId, userId);
309                         if (createGrouping.isRight()) {
310                                 return buildErrorResponse(createGrouping.right().value());
311                         }
312                         ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.CREATED);
313                         return buildOkResponse(responseFormat, createGrouping.left().value());
314
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));
320
321                 }
322         }
323
324         @DELETE
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) {
334
335                 try {
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());
340                         }
341                         ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT);
342                         return buildOkResponse(responseFormat, null);
343
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));
349
350                 }
351         }
352
353         /////////////////////////////////////////////////////////////////////////////////////////////////////
354         // retrieve all tags
355         @GET
356         @Path("/tags")
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);
364
365                 try {
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));
371                         } else {
372                                 return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), either.left().value());
373                         }
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));
379                 }
380         }
381
382         /////////////////////////////////////////////////////////////////////////////////////////////////////
383         // retrieve all property scopes
384         @GET
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);
393
394                 try {
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));
400                         } else {
401                                 return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), either.left().value());
402                         }
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));
408                 }
409         }
410
411         /////////////////////////////////////////////////////////////////////////////////////////////////////
412         // retrieve all artifact types
413         @GET
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);
422
423                 try {
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));
429                         } else {
430
431                                 Integer defaultHeatTimeout = ConfigurationManager.getConfigurationManager().getConfiguration().getDefaultHeatArtifactTimeoutMinutes();
432                                 ArtifactTypesInfo typesResponse = new ArtifactTypesInfo();
433                                 typesResponse.setArtifactTypes(either.left().value());
434                                 typesResponse.setHeatDefaultTimeout(defaultHeatTimeout);
435
436                                 return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), typesResponse);
437                         }
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));
443                 }
444         }
445
446         /////////////////////////////////////////////////////////////////////////////////////////////////////
447         // retrieve all artifact types
448         @GET
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);
457
458                 try {
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();
464
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));
477                         } else {
478                                 Map<String, Object> artifacts = new HashMap<String, Object>();
479                                 Map<String, Object> configuration = new HashMap<String, Object>();
480
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);
490                         }
491
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));
497                 }
498         }
499
500         /////////////////////////////////////////////////////////////////////////////////////////////////////
501         // retrieve all followed resources and services
502         @GET
503         @Path("/followed")
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) {
510
511                 Response res = null;
512                 User userData = null;
513                 try {
514                         String url = request.getMethod() + " " + request.getRequestURI();
515                         log.debug("Start handle request of {}", url);
516                         UserBusinessLogic userAdminManager = getUserAdminManager(request.getSession().getServletContext());
517
518                         // Getting the user
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));
523                         }
524
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);
528                                 // res =
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());
534                                 }
535                                 Object data = RepresentationUtils.toRepresentation(followedResourcesServices.left().value());
536                                 res = buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), data);
537                         } else {
538                                 res = buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
539                         }
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));
545                 }
546                 return res;
547         }
548
549         /////////////////////////////////////////////////////////////////////////////////////////////////////
550         // retrieve all certified resources and services and their last version
551         @GET
552         @Path("/screen")
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) {
559
560                 Response res = null;
561                 try {
562                         String url = request.getMethod() + " " + request.getRequestURI();
563                         log.debug("Start handle request of {}", url);
564
565                         Either<Map<String, List<? extends Component>>, ResponseFormat> catalogData = getElementBL(request.getSession().getServletContext()).getCatalogComponents(userId, excludeTypes);
566
567                         if (catalogData.isRight()) {
568                                 log.debug("failed to get catalog data");
569                                 return buildErrorResponse(catalogData.right().value());
570                         }
571                         Object data = RepresentationUtils.toRepresentation(catalogData.left().value());
572                         res = buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), data);
573
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));
579                 }
580                 return res;
581         }
582
583         @DELETE
584         @Path("/inactiveComponents/{componentType}")
585         public Response deleteMarkedResources(@PathParam("componentType") final String componentType, @Context final HttpServletRequest request) {
586
587                 ServletContext context = request.getSession().getServletContext();
588
589                 String url = request.getMethod() + " " + request.getRequestURI();
590                 log.debug("Start handle request of {}", url);
591
592                 // get modifier id
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);
597
598                 Response response = null;
599
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));
604                 }
605
606                 List<NodeTypeEnum> componentsList = new ArrayList<NodeTypeEnum>();
607                 componentsList.add(nodeType);
608                 try {
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);
612
613                         if (cleanResult.isRight()) {
614                                 log.debug("failed to delete marked components of type {}", nodeType);
615                                 response = buildErrorResponse(cleanResult.right().value());
616                                 return response;
617                         }
618                         response = buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), cleanResult.left().value());
619                         return response;
620
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));
626                         return response;
627
628                 }
629         }
630
631         @GET
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}]}]}]");
640         }
641
642 }