Fix the Sonar Findings
[holmes/rule-management.git] / rulemgt / src / main / java / org / onap / holmes / rulemgt / resources / RuleMgtResources.java
1 /**\r
2  * Copyright 2017 ZTE Corporation.\r
3  *\r
4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except\r
5  * in compliance with the License. You may obtain a copy of the License at\r
6  *\r
7  * http://www.apache.org/licenses/LICENSE-2.0\r
8  *\r
9  * Unless required by applicable law or agreed to in writing, software distributed under the License\r
10  * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\r
11  * or implied. See the License for the specific language governing permissions and limitations under\r
12  * the License.\r
13  */\r
14 package org.onap.holmes.rulemgt.resources;\r
15 \r
16 import com.codahale.metrics.annotation.Timed;\r
17 import io.swagger.annotations.Api;\r
18 import io.swagger.annotations.ApiOperation;\r
19 import io.swagger.annotations.ApiParam;\r
20 import io.swagger.annotations.SwaggerDefinition;\r
21 import java.util.Locale;\r
22 import javax.inject.Inject;\r
23 import javax.servlet.http.HttpServletRequest;\r
24 import javax.ws.rs.DELETE;\r
25 import javax.ws.rs.GET;\r
26 import javax.ws.rs.POST;\r
27 import javax.ws.rs.PUT;\r
28 import javax.ws.rs.Path;\r
29 import javax.ws.rs.PathParam;\r
30 import javax.ws.rs.Produces;\r
31 import javax.ws.rs.QueryParam;\r
32 import javax.ws.rs.core.Context;\r
33 import javax.ws.rs.core.MediaType;\r
34 import lombok.extern.slf4j.Slf4j;\r
35 import org.jvnet.hk2.annotations.Service;\r
36 import org.onap.holmes.common.exception.CorrelationException;\r
37 import org.onap.holmes.common.utils.ExceptionUtil;\r
38 import org.onap.holmes.common.utils.GsonUtil;\r
39 import org.onap.holmes.common.utils.LanguageUtil;\r
40 import org.onap.holmes.common.utils.UserUtil;\r
41 import org.onap.holmes.rulemgt.bean.request.RuleCreateRequest;\r
42 import org.onap.holmes.rulemgt.bean.request.RuleDeleteRequest;\r
43 import org.onap.holmes.rulemgt.bean.request.RuleQueryCondition;\r
44 import org.onap.holmes.rulemgt.bean.request.RuleUpdateRequest;\r
45 import org.onap.holmes.rulemgt.bean.response.RuleAddAndUpdateResponse;\r
46 import org.onap.holmes.rulemgt.bean.response.RuleQueryListResponse;\r
47 import org.onap.holmes.rulemgt.constant.RuleMgtConstant;\r
48 import org.onap.holmes.rulemgt.wrapper.RuleMgtWrapper;\r
49 \r
50 @Service\r
51 @SwaggerDefinition\r
52 @Path("/rule")\r
53 @Api(tags = {"Holmes Rule Management"})\r
54 @Produces(MediaType.APPLICATION_JSON)\r
55 @Slf4j\r
56 public class RuleMgtResources {\r
57 \r
58     @Inject\r
59     private RuleMgtWrapper ruleMgtWrapper;\r
60 \r
61     @PUT\r
62     @Produces(MediaType.APPLICATION_JSON)\r
63     @ApiOperation(value = "Save a rule into the database; deploy it to the Drools engine if it is enabled.",\r
64             response = RuleAddAndUpdateResponse.class)\r
65     @Timed\r
66     public RuleAddAndUpdateResponse addCorrelationRule(@Context HttpServletRequest request,\r
67             @ApiParam(value =\r
68                     "The request entity of the HTTP call, which comprises \"ruleName\"(required), "\r
69                             + "\"loopControlName\"(required), \"content\"(required), \"enabled\"(required) "\r
70                             + "and \"description\"(optional)", required = true)\r
71                     RuleCreateRequest ruleCreateRequest) {\r
72         Locale locale = LanguageUtil.getLocale(request);\r
73         RuleAddAndUpdateResponse ruleChangeResponse;\r
74         try {\r
75             ruleChangeResponse = ruleMgtWrapper\r
76                     .addCorrelationRule(UserUtil.getUserName(request), ruleCreateRequest);\r
77             log.info("create rule:" + ruleCreateRequest.getRuleName() + " success.");\r
78             return ruleChangeResponse;\r
79         } catch (CorrelationException e) {\r
80             log.error("create rule:" + ruleCreateRequest.getRuleName() + " failed", e);\r
81             throw ExceptionUtil.buildExceptionResponse(e.getMessage());\r
82         }\r
83     }\r
84 \r
85     @POST\r
86     @Produces(MediaType.APPLICATION_JSON)\r
87     @ApiOperation(value = "Update an existing rule; deploy it to the Drools engine if it is enabled.", response = RuleAddAndUpdateResponse.class)\r
88     @Timed\r
89     public RuleAddAndUpdateResponse updateCorrelationRule(@Context HttpServletRequest request,\r
90             @ApiParam(value =\r
91                     "The request entity of the HTTP call, which comprises \"ruleId\"(required), "\r
92                             + "\"content\"(required), \"enabled\"(required) and \"description\"(optional)", required = true)\r
93                     RuleUpdateRequest ruleUpdateRequest) {\r
94         Locale locale = LanguageUtil.getLocale(request);\r
95         RuleAddAndUpdateResponse ruleChangeResponse;\r
96         try {\r
97             ruleChangeResponse = ruleMgtWrapper\r
98                     .updateCorrelationRule(UserUtil.getUserName(request), ruleUpdateRequest);\r
99             log.info("update rule:" + ruleUpdateRequest.getRuleId() + " successful");\r
100             return ruleChangeResponse;\r
101         } catch (CorrelationException e) {\r
102             log.error("update rule:" + ruleUpdateRequest.getContent() + " failed", e);\r
103             throw ExceptionUtil.buildExceptionResponse(e.getMessage());\r
104         }\r
105     }\r
106 \r
107     @DELETE\r
108     @Produces(MediaType.APPLICATION_JSON)\r
109     @ApiOperation(value = "Remove a rule from Holmes.")\r
110     @Timed\r
111     @Path("/{ruleid}")\r
112     public boolean deleteCorrelationRule(@Context HttpServletRequest request,\r
113             @PathParam("ruleid") String ruleId) {\r
114         Locale locale = LanguageUtil.getLocale(request);\r
115         try {\r
116             ruleMgtWrapper.deleteCorrelationRule(new RuleDeleteRequest(ruleId));\r
117             log.info("delete rule:" + ruleId + " successful");\r
118             return true;\r
119         } catch (CorrelationException e) {\r
120             log.error("delete rule:" + ruleId + " failed", e);\r
121             throw ExceptionUtil.buildExceptionResponse(e.getMessage());\r
122         }\r
123     }\r
124 \r
125     @GET\r
126     @Produces(MediaType.APPLICATION_JSON)\r
127     @ApiOperation(value = "Query rules using certain criteria.", response = RuleQueryListResponse.class)\r
128     @Timed\r
129     public RuleQueryListResponse getCorrelationRules(@Context HttpServletRequest request,\r
130             @ApiParam(value =\r
131                     "A JSON string used as a query parameter, which comprises \"ruleid\"(optional), "\r
132                             + "\"rulename\"(optional), \"creator\"(optional), "\r
133                             + "\"modifier\"(optional) and \"enabled\"(optional). E.g. {\"ruleid\":\"rule_1484727187317\"}",\r
134                     required = false) @QueryParam("queryrequest") String ruleQueryRequest) {\r
135         Locale locale = LanguageUtil.getLocale(request);\r
136         RuleQueryListResponse ruleQueryListResponse;\r
137 \r
138         RuleQueryCondition ruleQueryCondition = getRuleQueryCondition(ruleQueryRequest, request);\r
139         try {\r
140             ruleQueryListResponse = ruleMgtWrapper\r
141                     .getCorrelationRuleByCondition(ruleQueryCondition);\r
142             log.info("query rule successful by condition:" + ruleQueryCondition);\r
143             return ruleQueryListResponse;\r
144         } catch (CorrelationException e) {\r
145             log.error("query rule failed,cause query condition conversion failure", e);\r
146             throw ExceptionUtil.buildExceptionResponse(e.getMessage());\r
147         }\r
148     }\r
149 \r
150     private RuleQueryCondition getRuleQueryCondition(String queryRequest,\r
151             HttpServletRequest request) {\r
152         Locale locale = LanguageUtil.getLocale(request);\r
153         RuleQueryCondition ruleQueryCondition = GsonUtil\r
154                 .jsonToBean(queryRequest, RuleQueryCondition.class);\r
155         if (queryRequest == null) {\r
156             if (ruleQueryCondition == null) {\r
157                 ruleQueryCondition = new RuleQueryCondition();\r
158             }\r
159             ruleQueryCondition.setEnabled(RuleMgtConstant.STATUS_RULE_ALL);\r
160         } else if (queryRequest.indexOf("enabled") == -1) {\r
161             ruleQueryCondition.setEnabled(RuleMgtConstant.STATUS_RULE_ALL);\r
162         }\r
163         return ruleQueryCondition;\r
164     }\r
165 }\r