Merge "Add proxy support"
[sdc.git] / catalog-be / src / main / java / org / openecomp / sdc / be / servlets / AdditionalInformationServlet.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 javax.inject.Singleton;
24 import javax.servlet.ServletContext;
25 import javax.servlet.http.HttpServletRequest;
26 import javax.ws.rs.Consumes;
27 import javax.ws.rs.DELETE;
28 import javax.ws.rs.GET;
29 import javax.ws.rs.HeaderParam;
30 import javax.ws.rs.POST;
31 import javax.ws.rs.PUT;
32 import javax.ws.rs.Path;
33 import javax.ws.rs.PathParam;
34 import javax.ws.rs.Produces;
35 import javax.ws.rs.core.Context;
36 import javax.ws.rs.core.MediaType;
37 import javax.ws.rs.core.Response;
38
39 import org.openecomp.sdc.be.components.impl.AdditionalInformationBusinessLogic;
40 import org.openecomp.sdc.be.config.BeEcompErrorManager;
41 import org.openecomp.sdc.be.dao.api.ActionStatus;
42 import org.openecomp.sdc.be.datatypes.elements.AdditionalInfoParameterInfo;
43 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
44 import org.openecomp.sdc.be.impl.WebAppContextWrapper;
45 import org.openecomp.sdc.be.model.AdditionalInformationDefinition;
46 import org.openecomp.sdc.common.api.Constants;
47 import org.openecomp.sdc.common.config.EcompErrorName;
48 import org.openecomp.sdc.exception.ResponseFormat;
49 import org.slf4j.Logger;
50 import org.slf4j.LoggerFactory;
51 import org.springframework.web.context.WebApplicationContext;
52
53 import com.jcabi.aspects.Loggable;
54 import io.swagger.annotations.Api;
55 import io.swagger.annotations.ApiOperation;
56 import io.swagger.annotations.ApiParam;
57 import io.swagger.annotations.ApiResponse;
58 import io.swagger.annotations.ApiResponses;
59
60 import fj.data.Either;
61
62 @Loggable(prepend = true, value = Loggable.DEBUG, trim = false)
63 @Path("/v1/catalog")
64 @Api(value = "Additional Information Servlet", description = "Additional Information Servlet")
65 @Singleton
66 public class AdditionalInformationServlet extends BeGenericServlet {
67
68         private static Logger log = LoggerFactory.getLogger(AdditionalInformationServlet.class.getName());
69         
70         /**
71          * 
72          * @param resourceId
73          * @param data
74          * @param request
75          * @param userUserId
76          * @return
77          */
78         @POST
79         @Path("/resources/{resourceId}/additionalinfo")
80         @Consumes(MediaType.APPLICATION_JSON)
81         @Produces(MediaType.APPLICATION_JSON)
82         @ApiOperation(value = "Create Additional Information Label and Value", httpMethod = "POST", notes = "Returns created Additional Inforamtion property", response = Response.class)
83         @ApiResponses(value = { @ApiResponse(code = 201, message = "Additional information created"), @ApiResponse(code = 403, message = "Restricted operation"), @ApiResponse(code = 400, message = "Invalid content / Missing content"),
84                         @ApiResponse(code = 409, message = "Additional information key already exist") })
85         public Response createResourceAdditionalInformationLabel(@ApiParam(value = "resource id to update with new property", required = true) @PathParam("resourceId") final String resourceId,
86                         @ApiParam(value = "Additional information key value to be created", required = true) String data, @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userUserId) {
87
88                 return createAdditionalInformationLabelForComponent(NodeTypeEnum.Resource, resourceId, request, userUserId, data);
89
90         }
91         
92         /**
93          * 
94          * @param serviceId
95          * @param data
96          * @param request
97          * @param userUserId
98          * @return
99          */
100         @POST
101         @Path("/services/{serviceId}/additionalinfo")
102         @Consumes(MediaType.APPLICATION_JSON)
103         @Produces(MediaType.APPLICATION_JSON)
104         @ApiOperation(value = "Create Additional Information Label and Value", httpMethod = "POST", notes = "Returns created Additional Inforamtion property", response = Response.class)
105         @ApiResponses(value = { @ApiResponse(code = 201, message = "Additional information created"), @ApiResponse(code = 403, message = "Restricted operation"), @ApiResponse(code = 400, message = "Invalid content / Missing content"),
106                         @ApiResponse(code = 409, message = "Additional information key already exist") })
107         public Response createServiceAdditionalInformationLabel(@ApiParam(value = "service id to update with new property", required = true) @PathParam("serviceId") final String serviceId,
108                         @ApiParam(value = "Additional information key value to be created", required = true) String data, @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userUserId) {
109
110                 return createAdditionalInformationLabelForComponent(NodeTypeEnum.Service, serviceId, request, userUserId, data);
111
112         }
113         
114         /**
115          * 
116          * @param resourceId
117          * @param labelId
118          * @param data
119          * @param request
120          * @param userId
121          * @return
122          */
123         @PUT
124         @Path("/resources/{resourceId}/additionalinfo/{labelId}")
125         @Consumes(MediaType.APPLICATION_JSON)
126         @Produces(MediaType.APPLICATION_JSON)
127         @ApiOperation(value = "Update Additional Information Label and Value", httpMethod = "PUT", notes = "Returns updated Additional Inforamtion property", response = Response.class)
128         @ApiResponses(value = { @ApiResponse(code = 200, message = "Additional information updated"), @ApiResponse(code = 403, message = "Restricted operation"), @ApiResponse(code = 400, message = "Invalid content / Missing content"),
129                         @ApiResponse(code = 409, message = "Additional information key already exist") })
130         public Response updateResourceAdditionalInformationLabel(@ApiParam(value = "resource id to update with new property", required = true) @PathParam("resourceId") final String resourceId,
131                         @ApiParam(value = "label id", required = true) @PathParam("labelId") final String labelId, @ApiParam(value = "Additional information key value to be created", required = true) String data, @Context final HttpServletRequest request,
132                         @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
133
134                 return updateAdditionalInformationLabelForComponent(NodeTypeEnum.Resource, resourceId, labelId, request, userId, data);
135
136         }
137         
138         /**
139          * 
140          * @param serviceId
141          * @param labelId
142          * @param data
143          * @param request
144          * @param userId
145          * @return
146          */
147         @PUT
148         @Path("/services/{serviceId}/additionalinfo/{labelId}")
149         @Consumes(MediaType.APPLICATION_JSON)
150         @Produces(MediaType.APPLICATION_JSON)
151         @ApiOperation(value = "Update Additional Information Label and Value", httpMethod = "PUT", notes = "Returns updated Additional Inforamtion property", response = Response.class)
152         @ApiResponses(value = { @ApiResponse(code = 200, message = "Additional information updated"), @ApiResponse(code = 403, message = "Restricted operation"), @ApiResponse(code = 400, message = "Invalid content / Missing content"),
153                         @ApiResponse(code = 409, message = "Additional information key already exist") })
154         public Response updateServiceAdditionalInformationLabel(@ApiParam(value = "service id to update with new property", required = true) @PathParam("serviceId") final String serviceId,
155                         @ApiParam(value = "label id", required = true) @PathParam("labelId") final String labelId, @ApiParam(value = "Additional information key value to be created", required = true) String data, @Context final HttpServletRequest request,
156                         @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
157
158                 return updateAdditionalInformationLabelForComponent(NodeTypeEnum.Service, serviceId, labelId, request, userId, data);
159
160         }
161         
162         /**
163          * 
164          * @param resourceId
165          * @param labelId
166          * @param request
167          * @param userId
168          * @return
169          */
170         @DELETE
171         @Path("/resources/{resourceId}/additionalinfo/{labelId}")
172         @Consumes(MediaType.APPLICATION_JSON)
173         @Produces(MediaType.APPLICATION_JSON)
174         @ApiOperation(value = "Create Additional Information Label and Value", httpMethod = "DELETE", notes = "Returns deleted Additional Inforamtion property", response = Response.class)
175         @ApiResponses(value = { @ApiResponse(code = 200, message = "Additional information deleted"), @ApiResponse(code = 403, message = "Restricted operation"), @ApiResponse(code = 400, message = "Invalid content / Missing content"),
176                         @ApiResponse(code = 409, message = "Additional information key already exist") })
177         public Response updateResourceAdditionalInformationLabel(@ApiParam(value = "resource id to update with new property", required = true) @PathParam("resourceId") final String resourceId,
178                         @ApiParam(value = "label id", required = true) @PathParam("labelId") final String labelId, @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
179
180                 return deleteAdditionalInformationLabelForComponent(NodeTypeEnum.Resource, resourceId, labelId, request, userId);
181
182         }
183         
184         /**
185          * 
186          * @param serviceId
187          * @param labelId
188          * @param request
189          * @param userId
190          * @return
191          */
192         @DELETE
193         @Path("/services/{serviceId}/additionalinfo/{labelId}")
194         @Consumes(MediaType.APPLICATION_JSON)
195         @Produces(MediaType.APPLICATION_JSON)
196         @ApiOperation(value = "Create Additional Information Label and Value", httpMethod = "DELETE", notes = "Returns deleted Additional Inforamtion property", response = Response.class)
197         @ApiResponses(value = { @ApiResponse(code = 200, message = "Additional information deleted"), @ApiResponse(code = 403, message = "Restricted operation"), @ApiResponse(code = 400, message = "Invalid content / Missing content"),
198                         @ApiResponse(code = 409, message = "Additional information key already exist") })
199         public Response deleteServiceAdditionalInformationLabel(@ApiParam(value = "service id to update with new property", required = true) @PathParam("serviceId") final String serviceId,
200                         @ApiParam(value = "label id", required = true) @PathParam("labelId") final String labelId, @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
201
202                 return deleteAdditionalInformationLabelForComponent(NodeTypeEnum.Service, serviceId, labelId, request, userId);
203
204         }
205         
206         /**
207          * 
208          * @param resourceId
209          * @param labelId
210          * @param request
211          * @param userId
212          * @return
213          */
214         @GET
215         @Path("/resources/{resourceId}/additionalinfo/{labelId}")
216         @Consumes(MediaType.APPLICATION_JSON)
217         @Produces(MediaType.APPLICATION_JSON)
218         @ApiOperation(value = "Get Additional Information by id", httpMethod = "GET", notes = "Returns Additional Inforamtion property", response = Response.class)
219         @ApiResponses(value = { @ApiResponse(code = 200, message = "fetched additional information"), @ApiResponse(code = 403, message = "Restricted operation"), @ApiResponse(code = 400, message = "Invalid content / Missing content"),
220                         @ApiResponse(code = 409, message = "Additional information key already exist") })
221         public Response getResourceAdditionalInformationLabel(@ApiParam(value = "resource id to update with new property", required = true) @PathParam("resourceId") final String resourceId,
222                         @ApiParam(value = "label id", required = true) @PathParam("labelId") final String labelId, @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
223
224                 return getAdditionalInformationLabelForComponent(NodeTypeEnum.Resource, resourceId, labelId, request, userId);
225
226         }
227         
228         /**
229          * 
230          * @param serviceId
231          * @param labelId
232          * @param request
233          * @param userId
234          * @return
235          */
236         @GET
237         @Path("/services/{serviceId}/additionalinfo/{labelId}")
238         @Consumes(MediaType.APPLICATION_JSON)
239         @Produces(MediaType.APPLICATION_JSON)
240         @ApiOperation(value = "Get Additional Information by id", httpMethod = "GET", notes = "Returns Additional Inforamtion property", response = Response.class)
241         @ApiResponses(value = { @ApiResponse(code = 200, message = "fetched additional information"), @ApiResponse(code = 403, message = "Restricted operation"), @ApiResponse(code = 400, message = "Invalid content / Missing content"),
242                         @ApiResponse(code = 409, message = "Additional information key already exist") })
243         public Response getServiceAdditionalInformationLabel(@ApiParam(value = "service id to update with new property", required = true) @PathParam("serviceId") final String serviceId,
244                         @ApiParam(value = "label id", required = true) @PathParam("labelId") final String labelId, @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
245
246                 return getAdditionalInformationLabelForComponent(NodeTypeEnum.Service, serviceId, labelId, request, userId);
247
248         }
249         
250         /**
251          * 
252          * @param resourceId
253          * @param request
254          * @param userId
255          * @return
256          */
257         @GET
258         @Path("/resources/{resourceId}/additionalinfo")
259         @Consumes(MediaType.APPLICATION_JSON)
260         @Produces(MediaType.APPLICATION_JSON)
261         @ApiOperation(value = "Get all Additional Information under resource", httpMethod = "GET", notes = "Returns Additional Inforamtion property", response = Response.class)
262         @ApiResponses(value = { @ApiResponse(code = 200, message = "list of additional information"), @ApiResponse(code = 403, message = "Restricted operation"), @ApiResponse(code = 400, message = "Invalid content / Missing content"),
263                         @ApiResponse(code = 409, message = "Additional information key already exist") })
264         public Response getAllResourceAdditionalInformationLabel(@ApiParam(value = "resource id to update with new property", required = true) @PathParam("resourceId") final String resourceId, @Context final HttpServletRequest request,
265                         @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
266
267                 return getAllAdditionalInformationLabelForComponent(NodeTypeEnum.Resource, resourceId, request, userId);
268
269         }
270         
271         /**
272          * 
273          * @param serviceId
274          * @param request
275          * @param userId
276          * @return
277          */
278         @GET
279         @Path("/services/{serviceId}/additionalinfo")
280         @Consumes(MediaType.APPLICATION_JSON)
281         @Produces(MediaType.APPLICATION_JSON)
282         @ApiOperation(value = "Get all Additional Information under service", httpMethod = "GET", notes = "Returns Additional Inforamtion property", response = Response.class)
283         @ApiResponses(value = { @ApiResponse(code = 200, message = "list of additional information"), @ApiResponse(code = 403, message = "Restricted operation"), @ApiResponse(code = 400, message = "Invalid content / Missing content"),
284                         @ApiResponse(code = 409, message = "Additional information key already exist") })
285         public Response getAllServiceAdditionalInformationLabel(@ApiParam(value = "service id to update with new property", required = true) @PathParam("serviceId") final String serviceId, @Context final HttpServletRequest request,
286                         @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {
287
288                 return getAllAdditionalInformationLabelForComponent(NodeTypeEnum.Service, serviceId, request, userId);
289
290         }
291
292         /**
293          * 
294          * Create additional information property under given resource/service
295          * 
296          * @param nodeType
297          * @param uniqueId
298          * @param request
299          * @param userId
300          * @param data
301          * @return
302          */
303         protected Response createAdditionalInformationLabelForComponent(NodeTypeEnum nodeType, String uniqueId, HttpServletRequest request, String userId, String data) {
304
305                 ServletContext context = request.getSession().getServletContext();
306
307                 String url = request.getMethod() + " " + request.getRequestURI();
308                 log.debug("Start handle request of {}", url);
309                 log.debug("modifier id is {}", userId);
310                 log.debug("data is {}", data);
311
312                 try {
313                         // convert json to AdditionalInfoParameterInfo
314                         AdditionalInfoParameterInfo additionalInfoParameterInfo = gson.fromJson(data, AdditionalInfoParameterInfo.class);
315
316                         // create the new property
317                         AdditionalInformationBusinessLogic businessLogic = getBL(context);
318
319                         Either<AdditionalInfoParameterInfo, ResponseFormat> either = businessLogic.createAdditionalInformation(nodeType, uniqueId, additionalInfoParameterInfo, null, userId);
320
321                         if (either.isRight()) {
322                                 ResponseFormat responseFormat = either.right().value();
323                                 log.info("Failed to create additional information {}. Reason - {}", additionalInfoParameterInfo, responseFormat);
324                                 return buildErrorResponse(responseFormat);
325                         }
326
327                         AdditionalInfoParameterInfo createdAI = either.left().value();
328
329                         log.debug("Additional information {}={} created successfully with id {}", createdAI.getKey(), createdAI.getValue(), createdAI.getUniqueId());
330
331                         ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.CREATED);
332                         return buildOkResponse(responseFormat, createdAI);
333
334                 } catch (Exception e) {
335                         BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Create Additional Information");
336                         log.debug("Create additional information failed with exception", e);
337                         ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR);
338                         return buildErrorResponse(responseFormat);
339                 }
340
341         }
342
343         /**
344          * Update additional information property by id under given resource/service
345          * 
346          * @param nodeType
347          * @param uniqueId
348          * @param labelId
349          * @param request
350          * @param userId
351          * @param data
352          * @return
353          */
354         protected Response updateAdditionalInformationLabelForComponent(NodeTypeEnum nodeType, String uniqueId, String labelId, HttpServletRequest request, String userId, String data) {
355
356                 ServletContext context = request.getSession().getServletContext();
357
358                 String url = request.getMethod() + " " + request.getRequestURI();
359                 log.debug("Start handle request of {}", url);
360                 log.debug("modifier id is {}", userId);
361                 log.debug("data is {}", data);
362
363                 try {
364                         // convert json to AdditionalInfoParameterInfo
365                         AdditionalInfoParameterInfo additionalInfoParameterInfo = gson.fromJson(data, AdditionalInfoParameterInfo.class);
366
367                         // create the new property
368                         AdditionalInformationBusinessLogic businessLogic = getBL(context);
369
370                         additionalInfoParameterInfo.setUniqueId(labelId);
371
372                         Either<AdditionalInfoParameterInfo, ResponseFormat> either = businessLogic.updateAdditionalInformation(nodeType, uniqueId, additionalInfoParameterInfo, null, userId);
373
374                         if (either.isRight()) {
375                                 ResponseFormat responseFormat = either.right().value();
376                                 log.info("Failed to update additional information property. Reason - {}", responseFormat);
377                                 return buildErrorResponse(responseFormat);
378                         }
379
380                         AdditionalInfoParameterInfo createdAI = either.left().value();
381
382                         log.debug("Additional information {}={} updated successfully with id {}", createdAI.getKey(), createdAI.getValue(), createdAI.getUniqueId());
383
384                         ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.OK);
385                         return buildOkResponse(responseFormat, createdAI);
386
387                 } catch (Exception e) {
388                         BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Update Additional Information");
389                         BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Update Additional Information");
390                         log.debug("Update additional information failed with exception", e);
391                         ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR);
392                         return buildErrorResponse(responseFormat);
393                 }
394
395         }
396
397         /**
398          * 
399          * Delete an additional information property by id under given resource/service
400          *
401          * @param nodeType
402          * @param uniqueId
403          * @param labelId
404          * @param request
405          * @param userId
406          * @return
407          */
408         protected Response deleteAdditionalInformationLabelForComponent(NodeTypeEnum nodeType, String uniqueId, String labelId, HttpServletRequest request, String userId) {
409
410                 ServletContext context = request.getSession().getServletContext();
411
412                 String url = request.getMethod() + " " + request.getRequestURI();
413                 log.debug("Start handle request of {}", url);
414                 log.debug("modifier id is {}", userId);
415
416                 try {
417
418                         AdditionalInformationBusinessLogic businessLogic = getBL(context);
419
420                         AdditionalInfoParameterInfo additionalInfoParameterInfo = new AdditionalInfoParameterInfo();
421                         additionalInfoParameterInfo.setUniqueId(labelId);
422
423                         Either<AdditionalInfoParameterInfo, ResponseFormat> either = businessLogic.deleteAdditionalInformation(nodeType, uniqueId, additionalInfoParameterInfo, null, userId);
424
425                         if (either.isRight()) {
426                                 ResponseFormat responseFormat = either.right().value();
427                                 log.info("Failed to update additional information property. Reason - {}", responseFormat);
428                                 return buildErrorResponse(responseFormat);
429                         }
430
431                         AdditionalInfoParameterInfo createdAI = either.left().value();
432
433                         log.debug("Additional information {}={} deleted successfully with id {}", createdAI.getKey(), createdAI.getValue(), createdAI.getUniqueId());
434
435                         ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.OK);
436                         return buildOkResponse(responseFormat, createdAI);
437
438                 } catch (Exception e) {
439                         BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Delete Additional Information");
440                         BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Delete Additional Information");
441                         log.debug("Delete additional information failed with exception", e);
442                         ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR);
443                         return buildErrorResponse(responseFormat);
444                 }
445
446         }
447
448         /**
449          * Get a specific additional information property by a given id under given resource/service
450          * 
451          * @param nodeType
452          * @param uniqueId
453          * @param labelId
454          * @param request
455          * @param userId
456          * @return
457          */
458         protected Response getAdditionalInformationLabelForComponent(NodeTypeEnum nodeType, String uniqueId, String labelId, HttpServletRequest request, String userId) {
459
460                 ServletContext context = request.getSession().getServletContext();
461
462                 String url = request.getMethod() + " " + request.getRequestURI();
463                 log.debug("Start handle request of {}", url);
464                 log.debug("modifier id is {}", userId);
465
466                 try {
467
468                         // create the new property
469                         AdditionalInformationBusinessLogic businessLogic = getBL(context);
470
471                         AdditionalInfoParameterInfo additionalInfoParameterInfo = new AdditionalInfoParameterInfo();
472                         additionalInfoParameterInfo.setUniqueId(labelId);
473
474                         Either<AdditionalInfoParameterInfo, ResponseFormat> either = businessLogic.getAdditionalInformation(nodeType, uniqueId, additionalInfoParameterInfo, null, userId);
475
476                         if (either.isRight()) {
477                                 ResponseFormat responseFormat = either.right().value();
478                                 log.info("Failed to update additional information property. Reason - {}", responseFormat);
479                                 return buildErrorResponse(responseFormat);
480                         }
481
482                         AdditionalInfoParameterInfo createdAI = either.left().value();
483
484                         log.debug("Additional information {}={} fetched successfully with id {}", createdAI.getKey(), createdAI.getValue(), createdAI.getUniqueId());
485
486                         ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.OK);
487                         return buildOkResponse(responseFormat, createdAI);
488
489                 } catch (Exception e) {
490                         BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Get Additional Information");
491                         BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get Additional Information");
492
493                         log.debug("get additional information failed with exception", e);
494                         ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR);
495                         return buildErrorResponse(responseFormat);
496                 }
497
498         }
499
500         /**
501          * Get all additional information properties under given resource/service
502          * 
503          * @param nodeType
504          * @param uniqueId
505          * @param request
506          * @param userId
507          * @return
508          */
509         protected Response getAllAdditionalInformationLabelForComponent(NodeTypeEnum nodeType, String uniqueId, HttpServletRequest request, String userId) {
510
511                 ServletContext context = request.getSession().getServletContext();
512
513                 String url = request.getMethod() + " " + request.getRequestURI();
514                 log.debug("Start handle request of {}", url);
515                 log.debug("modifier id is {}", userId);
516
517                 try {
518
519                         AdditionalInformationBusinessLogic businessLogic = getBL(context);
520
521                         Either<AdditionalInformationDefinition, ResponseFormat> either = businessLogic.getAllAdditionalInformation(nodeType, uniqueId, null, userId);
522                         if (either.isRight()) {
523                                 ResponseFormat responseFormat = either.right().value();
524                                 log.info("Failed to update additional information property. Reason - {}", responseFormat);
525                                 return buildErrorResponse(responseFormat);
526                         }
527
528                         AdditionalInformationDefinition additionalInformationDefinition = either.left().value();
529
530                         log.debug("All Additional information retrieved for component {} is {}", uniqueId, additionalInformationDefinition);
531
532                         ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.OK);
533                         return buildOkResponse(responseFormat, additionalInformationDefinition);
534
535                 } catch (Exception e) {
536                         BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeRestApiGeneralError, "Get All Additional Information");
537                         BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Get All Additional Information");
538                         log.debug("Get all addiotanl information properties failed with exception", e);
539                         ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR);
540                         return buildErrorResponse(responseFormat);
541                 }
542
543         }
544
545         private AdditionalInformationBusinessLogic getBL(ServletContext context) {
546                 WebAppContextWrapper webApplicationContextWrapper = (WebAppContextWrapper) context.getAttribute(Constants.WEB_APPLICATION_CONTEXT_WRAPPER_ATTR);
547                 WebApplicationContext webApplicationContext = webApplicationContextWrapper.getWebAppContext(context);
548                 AdditionalInformationBusinessLogic bl = webApplicationContext.getBean(AdditionalInformationBusinessLogic.class);
549                 return bl;
550         }
551
552 }