Upgrade swagger
[sdc.git] / catalog-be / src / main / java / org / openecomp / sdc / be / servlets / ComponentPropertyServlet.java
1 /*\r
2  * Copyright © 2016-2018 European Support Limited\r
3  *\r
4  * Licensed under the Apache License, Version 2.0 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *\r
8  *      http://www.apache.org/licenses/LICENSE-2.0\r
9  *\r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  */\r
16 \r
17 package org.openecomp.sdc.be.servlets;\r
18 \r
19 import java.util.List;\r
20 import java.util.Map;\r
21 import javax.inject.Inject;\r
22 import javax.inject.Singleton;\r
23 import javax.servlet.http.HttpServletRequest;\r
24 import javax.ws.rs.Consumes;\r
25 import javax.ws.rs.DELETE;\r
26 import javax.ws.rs.GET;\r
27 import javax.ws.rs.HeaderParam;\r
28 import javax.ws.rs.POST;\r
29 import javax.ws.rs.PUT;\r
30 import javax.ws.rs.Path;\r
31 import javax.ws.rs.PathParam;\r
32 import javax.ws.rs.Produces;\r
33 import javax.ws.rs.core.Context;\r
34 import javax.ws.rs.core.MediaType;\r
35 import javax.ws.rs.core.Response;\r
36 import org.openecomp.sdc.be.components.impl.PropertyBusinessLogic;\r
37 import org.openecomp.sdc.be.config.BeEcompErrorManager;\r
38 import org.openecomp.sdc.be.dao.api.ActionStatus;\r
39 import org.openecomp.sdc.be.datamodel.utils.PropertyValueConstraintValidationUtil;\r
40 import org.openecomp.sdc.be.impl.ComponentsUtils;\r
41 import org.openecomp.sdc.be.model.PropertyDefinition;\r
42 import org.openecomp.sdc.be.model.User;\r
43 import org.openecomp.sdc.be.model.cache.ApplicationDataTypeCache;\r
44 import org.openecomp.sdc.be.resources.data.EntryData;\r
45 import org.openecomp.sdc.be.user.UserBusinessLogic;\r
46 import org.openecomp.sdc.common.api.Constants;\r
47 import org.openecomp.sdc.exception.ResponseFormat;\r
48 import org.slf4j.Logger;\r
49 import org.slf4j.LoggerFactory;\r
50 import com.jcabi.aspects.Loggable;\r
51 import fj.data.Either;\r
52 import io.swagger.v3.oas.annotations.OpenAPIDefinition;\r
53 import io.swagger.v3.oas.annotations.Operation;\r
54 import io.swagger.v3.oas.annotations.Parameter;\r
55 import io.swagger.v3.oas.annotations.info.Info;\r
56 import io.swagger.v3.oas.annotations.media.ArraySchema;\r
57 import io.swagger.v3.oas.annotations.media.Content;\r
58 import io.swagger.v3.oas.annotations.media.Schema;\r
59 import io.swagger.v3.oas.annotations.responses.ApiResponse;\r
60 import io.swagger.v3.oas.annotations.responses.ApiResponses;\r
61 \r
62 @Loggable(prepend = true, value = Loggable.DEBUG, trim = false)\r
63 @Path("/v1/catalog")\r
64 @OpenAPIDefinition(info = @Info(title = "Component Property Servlet", description = "Component Property Servlet"))\r
65 @Singleton\r
66 public class ComponentPropertyServlet extends BeGenericServlet {\r
67 \r
68   private final PropertyBusinessLogic propertyBusinessLogic;\r
69   private final ApplicationDataTypeCache applicationDataTypeCache;\r
70 \r
71         @Inject\r
72   public ComponentPropertyServlet(UserBusinessLogic userBusinessLogic,\r
73       ComponentsUtils componentsUtils,\r
74       ApplicationDataTypeCache applicationDataTypeCache,\r
75       PropertyBusinessLogic propertyBusinessLogic) {\r
76     super(userBusinessLogic, componentsUtils);\r
77     this.applicationDataTypeCache = applicationDataTypeCache;\r
78     this.propertyBusinessLogic = propertyBusinessLogic;\r
79   }\r
80 \r
81   private static final Logger log = LoggerFactory.getLogger(ComponentPropertyServlet.class);\r
82   private static final String CREATE_PROPERTY = "Create Property";\r
83   private static final String DEBUG_MESSAGE = "Start handle request of {} modifier id is {}";\r
84 \r
85     @POST\r
86     @Path("services/{serviceId}/properties")\r
87     @Consumes(MediaType.APPLICATION_JSON)\r
88     @Produces(MediaType.APPLICATION_JSON)\r
89     @Operation(description = "Create Service Property", method = "POST", summary = "Returns created service property",\r
90             responses = @ApiResponse(\r
91                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))\r
92     @ApiResponses(value = {@ApiResponse(responseCode = "201", description = "Service property created"),\r
93             @ApiResponse(responseCode = "403", description = "Restricted operation"),\r
94             @ApiResponse(responseCode = "400", description = "Invalid content / Missing content"),\r
95             @ApiResponse(responseCode = "409", description = "Service property already exist")})\r
96     public Response createPropertyInService(\r
97             @Parameter(description = "service id to update with new property",\r
98                     required = true) @PathParam("serviceId") final String serviceId,\r
99             @Parameter(description = "Service property to be created", required = true) String data,\r
100             @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {\r
101 \r
102         return createProperty(serviceId, data, request, userId);\r
103     }\r
104 \r
105     @POST\r
106     @Path("resources/{resourceId}/properties")\r
107     @Consumes(MediaType.APPLICATION_JSON)\r
108     @Produces(MediaType.APPLICATION_JSON)\r
109     @Operation(description = "Create Resource Property", method = "POST", summary = "Returns created service property",\r
110             responses = @ApiResponse(\r
111                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))\r
112     @ApiResponses(value = {@ApiResponse(responseCode = "201", description = "Resource property created"),\r
113             @ApiResponse(responseCode = "403", description = "Restricted operation"),\r
114             @ApiResponse(responseCode = "400", description = "Invalid content / Missing content"),\r
115             @ApiResponse(responseCode = "409", description = "Resource property already exist")})\r
116     public Response createPropertyInResource(\r
117             @Parameter(description = "Resource id to update with new property",\r
118                     required = true) @PathParam("resourceId") final String resourceId,\r
119             @Parameter(description = "Resource property to be created", required = true) String data,\r
120             @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {\r
121 \r
122         return createProperty(resourceId, data, request, userId);\r
123     }\r
124 \r
125 \r
126     @GET\r
127     @Path("services/{serviceId}/properties/{propertyId}")\r
128     @Consumes(MediaType.APPLICATION_JSON)\r
129     @Produces(MediaType.APPLICATION_JSON)\r
130     @Operation(description = "Get Service Property", method = "GET", summary = "Returns property of service",\r
131             responses = @ApiResponse(\r
132                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))\r
133     @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "property"),\r
134             @ApiResponse(responseCode = "403", description = "Restricted operation"),\r
135             @ApiResponse(responseCode = "400", description = "Invalid content / Missing content"),\r
136             @ApiResponse(responseCode = "404", description = "Service property not found")})\r
137     public Response getPropertyInService(\r
138             @Parameter(description = "service id of property", required = true) @PathParam("serviceId") final String serviceId,\r
139             @Parameter(description = "property id to get", required = true) @PathParam("propertyId") final String propertyId,\r
140             @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {\r
141 \r
142         return getProperty(serviceId, propertyId, request, userId);\r
143     }\r
144 \r
145     @GET\r
146     @Path("resources/{resourceId}/properties/{propertyId}")\r
147     @Consumes(MediaType.APPLICATION_JSON)\r
148     @Produces(MediaType.APPLICATION_JSON)\r
149     @Operation(description = "Get Resource Property", method = "GET", summary = "Returns property of resource",\r
150             responses = @ApiResponse(\r
151                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))\r
152     @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "property"),\r
153             @ApiResponse(responseCode = "403", description = "Restricted operation"),\r
154             @ApiResponse(responseCode = "400", description = "Invalid content / Missing content"),\r
155             @ApiResponse(responseCode = "404", description = "Resource property not found")})\r
156     public Response getPropertyInResource(\r
157             @Parameter(description = "resource id of property",\r
158                     required = true) @PathParam("resourceId") final String resourceId,\r
159             @Parameter(description = "property id to get", required = true) @PathParam("propertyId") final String propertyId,\r
160             @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {\r
161 \r
162         return getProperty(resourceId, propertyId, request, userId);\r
163     }\r
164 \r
165     @GET\r
166     @Path("services/{serviceId}/properties")\r
167     @Consumes(MediaType.APPLICATION_JSON)\r
168     @Produces(MediaType.APPLICATION_JSON)\r
169     @Operation(description = "Get Service Property", method = "GET", summary = "Returns property list of service",\r
170             responses = @ApiResponse(\r
171                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))\r
172     @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "property"),\r
173             @ApiResponse(responseCode = "403", description = "Restricted operation"),\r
174             @ApiResponse(responseCode = "400", description = "Invalid content / Missing content"),\r
175             @ApiResponse(responseCode = "404", description = "Service property not found")})\r
176     public Response getPropertyListInService(\r
177             @Parameter(description = "service id of property",\r
178                     required = true) @PathParam("serviceId") final String serviceId,\r
179             @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {\r
180 \r
181         return getPropertyList(serviceId, request, userId);\r
182     }\r
183 \r
184     @GET\r
185     @Path("resources/{resourceId}/properties")\r
186     @Consumes(MediaType.APPLICATION_JSON)\r
187     @Produces(MediaType.APPLICATION_JSON)\r
188     @Operation(description = "Get Resource Property", method = "GET", summary = "Returns property list of resource",\r
189             responses = @ApiResponse(\r
190                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))\r
191     @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "property"),\r
192             @ApiResponse(responseCode = "403", description = "Restricted operation"),\r
193             @ApiResponse(responseCode = "400", description = "Invalid content / Missing content"),\r
194             @ApiResponse(responseCode = "404", description = "Resource property not found")})\r
195     public Response getPropertyListInResource(\r
196             @Parameter(description = "resource id of property",\r
197                     required = true) @PathParam("resourceId") final String resourceId,\r
198             @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {\r
199 \r
200         return getPropertyList(resourceId, request, userId);\r
201     }\r
202 \r
203     @DELETE\r
204     @Path("services/{serviceId}/properties/{propertyId}")\r
205     @Consumes(MediaType.APPLICATION_JSON)\r
206     @Produces(MediaType.APPLICATION_JSON)\r
207     @Operation(description = "Delete Service Property", method = "DELETE", summary = "Returns deleted property",\r
208             responses = @ApiResponse(\r
209                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))\r
210     @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "deleted property"),\r
211             @ApiResponse(responseCode = "403", description = "Restricted operation"),\r
212             @ApiResponse(responseCode = "400", description = "Invalid content / Missing content"),\r
213             @ApiResponse(responseCode = "404", description = "Service property not found")})\r
214     public Response deletePropertyInService(\r
215             @Parameter(description = "service id of property",\r
216                     required = true) @PathParam("serviceId") final String serviceId,\r
217             @Parameter(description = "Property id to delete",\r
218                     required = true) @PathParam("propertyId") final String propertyId,\r
219             @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {\r
220 \r
221         return deleteProperty(serviceId, propertyId, request, userId);\r
222     }\r
223 \r
224     @DELETE\r
225     @Path("resources/{resourceId}/properties/{propertyId}")\r
226     @Consumes(MediaType.APPLICATION_JSON)\r
227     @Produces(MediaType.APPLICATION_JSON)\r
228     @Operation(description = "Delete Resource Property", method = "DELETE", summary = "Returns deleted property",\r
229             responses = @ApiResponse(\r
230                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))\r
231     @ApiResponses(value = {@ApiResponse(responseCode = "204", description = "deleted property"),\r
232             @ApiResponse(responseCode = "403", description = "Restricted operation"),\r
233             @ApiResponse(responseCode = "400", description = "Invalid content / Missing content"),\r
234             @ApiResponse(responseCode = "404", description = "Resource property not found")})\r
235     public Response deletePropertyInResource(\r
236             @Parameter(description = "resource id of property",\r
237                     required = true) @PathParam("resourceId") final String resourceId,\r
238             @Parameter(description = "Property id to delete",\r
239                     required = true) @PathParam("propertyId") final String propertyId,\r
240             @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {\r
241 \r
242         return deleteProperty(resourceId, propertyId, request, userId);\r
243     }\r
244 \r
245     @PUT\r
246     @Path("services/{serviceId}/properties")\r
247     @Consumes(MediaType.APPLICATION_JSON)\r
248     @Produces(MediaType.APPLICATION_JSON)\r
249     @Operation(description = "Update Service Property", method = "PUT", summary = "Returns updated property",\r
250             responses = @ApiResponse(\r
251                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))\r
252     @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Service property updated"),\r
253             @ApiResponse(responseCode = "403", description = "Restricted operation"),\r
254             @ApiResponse(responseCode = "400", description = "Invalid content / Missing content")})\r
255     public Response updatePropertyInService(\r
256             @Parameter(description = "service id to update with new property",\r
257                     required = true) @PathParam("serviceId") final String serviceId,\r
258             @Parameter(description = "Service property to update", required = true) String data,\r
259             @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {\r
260 \r
261         return updateProperty(serviceId, data, request, userId);\r
262     }\r
263 \r
264     @PUT\r
265     @Path("resources/{resourceId}/properties")\r
266     @Consumes(MediaType.APPLICATION_JSON)\r
267     @Produces(MediaType.APPLICATION_JSON)\r
268     @Operation(description = "Update Resource Property", method = "PUT", summary = "Returns updated property",\r
269             responses = @ApiResponse(\r
270                     content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))\r
271     @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Resource property updated"),\r
272             @ApiResponse(responseCode = "403", description = "Restricted operation"),\r
273             @ApiResponse(responseCode = "400", description = "Invalid content / Missing content")})\r
274     public Response updatePropertyInResource(\r
275             @Parameter(description = "resource id to update with new property",\r
276                     required = true) @PathParam("resourceId") final String resourceId,\r
277             @Parameter(description = "Resource property to update", required = true) String data,\r
278             @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) {\r
279 \r
280         return updateProperty(resourceId, data, request, userId);\r
281     }\r
282 \r
283   private Response createProperty(String componentId, String data,  HttpServletRequest request,String userId) {\r
284     String url = request.getMethod() + " " + request.getRequestURI();\r
285     log.debug("Start handle request of {} modifier id is {} data is {}", url, userId, data);\r
286 \r
287     try{\r
288       Either<Map<String, PropertyDefinition>, ActionStatus> propertyDefinition =\r
289               getPropertyModel(componentId, data);\r
290       if (propertyDefinition.isRight()) {\r
291         ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(propertyDefinition.right().value());\r
292         return buildErrorResponse(responseFormat);\r
293       }\r
294 \r
295       Map<String, PropertyDefinition> properties = propertyDefinition.left().value();\r
296       if (properties == null || properties.size() != 1) {\r
297         log.info("Property content is invalid - {}", data);\r
298         ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.INVALID_CONTENT);\r
299         return buildErrorResponse(responseFormat);\r
300       }\r
301 \r
302       Map.Entry<String, PropertyDefinition> entry = properties.entrySet().iterator().next();\r
303       PropertyDefinition newPropertyDefinition = entry.getValue();\r
304       newPropertyDefinition.setParentUniqueId(componentId);\r
305       String propertyName = newPropertyDefinition.getName();\r
306 \r
307       Either<EntryData<String, PropertyDefinition>, ResponseFormat> addPropertyEither =\r
308               propertyBusinessLogic.addPropertyToComponent(componentId, propertyName, newPropertyDefinition, userId);\r
309 \r
310       if(addPropertyEither.isRight()) {\r
311         return buildErrorResponse(addPropertyEither.right().value());\r
312       }\r
313 \r
314       return buildOkResponse(newPropertyDefinition);\r
315 \r
316     } catch (Exception e) {\r
317       BeEcompErrorManager.getInstance().logBeRestApiGeneralError(CREATE_PROPERTY);\r
318       log.debug("create property failed with exception", e);\r
319       ResponseFormat responseFormat =\r
320               getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR);\r
321       return buildErrorResponse(responseFormat);\r
322     }\r
323   }\r
324 \r
325 \r
326   private Response updateProperty(String componentId, String data, HttpServletRequest request, String userId) {\r
327     String url = request.getMethod() + " " + request.getRequestURI();\r
328     log.debug("Start handle request of {}", url);\r
329 \r
330     // get modifier id\r
331     User modifier = new User();\r
332     modifier.setUserId(userId);\r
333     log.debug("modifier id is {}", userId);\r
334 //\r
335     try {\r
336       // convert json to PropertyDefinition\r
337 \r
338       Either<Map<String, PropertyDefinition>, ActionStatus> propertiesListEither =\r
339           getPropertiesListForUpdate(data);\r
340       if (propertiesListEither.isRight()) {\r
341         ResponseFormat responseFormat =\r
342             getComponentsUtils().getResponseFormat(propertiesListEither.right().value());\r
343         return buildErrorResponse(responseFormat);\r
344       }\r
345       Map<String, PropertyDefinition> properties = propertiesListEither.left().value();\r
346       if (properties == null) {\r
347         log.info("Property content is invalid - {}", data);\r
348         ResponseFormat responseFormat =\r
349             getComponentsUtils().getResponseFormat(ActionStatus.INVALID_CONTENT);\r
350         return buildErrorResponse(responseFormat);\r
351       }\r
352 \r
353                 //Validate value and Constraint of property\r
354                 Either<Boolean, ResponseFormat> constraintValidatorResponse =\r
355                                 PropertyValueConstraintValidationUtil.getInstance().\r
356                                                 validatePropertyConstraints(properties.values(), applicationDataTypeCache);\r
357                 if (constraintValidatorResponse.isRight()) {\r
358                         log.error("Failed validation value and constraint of property: {}",\r
359                                         constraintValidatorResponse.right().value());\r
360                         return buildErrorResponse(constraintValidatorResponse.right().value());\r
361                 }\r
362 \r
363       // update property\r
364 \r
365       for(PropertyDefinition propertyDefinition : properties.values()) {\r
366         Either<EntryData<String, PropertyDefinition>, ResponseFormat> status =\r
367             propertyBusinessLogic.updateComponentProperty(\r
368                 componentId, propertyDefinition.getUniqueId(), propertyDefinition, userId);\r
369         if (status.isRight()) {\r
370           log.info("Failed to update Property. Reason - ", status.right().value());\r
371           return buildErrorResponse(status.right().value());\r
372         }\r
373         EntryData<String, PropertyDefinition> property = status.left().value();\r
374         PropertyDefinition updatedPropertyDefinition = property.getValue();\r
375 \r
376         log.debug("Property id {} updated successfully ", updatedPropertyDefinition.getUniqueId());\r
377       }\r
378 \r
379       ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.OK);\r
380       return buildOkResponse(responseFormat, properties);\r
381 \r
382     } catch (Exception e) {\r
383       BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Update Property");\r
384       log.debug("update property failed with exception", e);\r
385       ResponseFormat responseFormat =\r
386           getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR);\r
387       return buildErrorResponse(responseFormat);\r
388 \r
389     }\r
390   }\r
391 \r
392   private Response getProperty(String componentId, String propertyId, HttpServletRequest request, String userId) {\r
393     String url = request.getMethod() + " " + request.getRequestURI();\r
394     log.debug(DEBUG_MESSAGE, url, userId);\r
395 \r
396     try {\r
397       Either<Map.Entry<String, PropertyDefinition>, ResponseFormat> retrievedPropertyEither =\r
398               propertyBusinessLogic.getComponentProperty(componentId, propertyId, userId);\r
399 \r
400       if(retrievedPropertyEither.isRight()) {\r
401         return buildErrorResponse(retrievedPropertyEither.right().value());\r
402       }\r
403 \r
404       return buildOkResponse(retrievedPropertyEither.left().value());\r
405 \r
406     } catch (Exception e) {\r
407       BeEcompErrorManager.getInstance().logBeRestApiGeneralError(CREATE_PROPERTY);\r
408       log.debug("get property failed with exception", e);\r
409       ResponseFormat responseFormat =\r
410               getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR);\r
411       return buildErrorResponse(responseFormat);\r
412     }\r
413   }\r
414   private Response getPropertyList(String componentId, HttpServletRequest request, String userId) {\r
415 \r
416     String url = request.getMethod() + " " + request.getRequestURI();\r
417     log.debug(DEBUG_MESSAGE, url, userId);\r
418 \r
419     try {\r
420       Either<List<PropertyDefinition>, ResponseFormat> propertiesListEither =\r
421               propertyBusinessLogic.getPropertiesList(componentId, userId);\r
422 \r
423       if(propertiesListEither.isRight()) {\r
424         return buildErrorResponse(propertiesListEither.right().value());\r
425       }\r
426 \r
427       return buildOkResponse(propertiesListEither.left().value());\r
428 \r
429     } catch (Exception e) {\r
430       BeEcompErrorManager.getInstance().logBeRestApiGeneralError(CREATE_PROPERTY);\r
431       log.debug("get property failed with exception", e);\r
432       ResponseFormat responseFormat =\r
433               getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR);\r
434       return buildErrorResponse(responseFormat);\r
435     }\r
436   }\r
437   private Response deleteProperty(String componentId, String propertyId, HttpServletRequest request, String userId) {\r
438     String url = request.getMethod() + " " + request.getRequestURI();\r
439     log.debug(DEBUG_MESSAGE, url, userId);\r
440 \r
441     try {\r
442 \r
443       // delete the property\r
444       Either<Map.Entry<String, PropertyDefinition>, ResponseFormat> status =\r
445               propertyBusinessLogic.deletePropertyFromComponent(componentId, propertyId, userId);\r
446       if (status.isRight()) {\r
447         log.debug("Failed to delete Property. Reason - ", status.right().value());\r
448         return buildErrorResponse(status.right().value());\r
449       }\r
450       Map.Entry<String, PropertyDefinition> property = status.left().value();\r
451       String name = property.getKey();\r
452       PropertyDefinition propertyDefinition = property.getValue();\r
453 \r
454       log.debug("Property {} deleted successfully with id {}", name, propertyDefinition.getUniqueId());\r
455       ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT);\r
456       return buildOkResponse(responseFormat, propertyToJson(property));\r
457 \r
458     } catch (Exception e) {\r
459       BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Delete Property");\r
460       log.debug("delete property failed with exception", e);\r
461       ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR);\r
462       return buildErrorResponse(responseFormat);\r
463 \r
464     }\r
465   }\r
466 \r
467 }\r