Merge "Tried to Fix Some Vulnerability Issues"
[holmes/rule-management.git] / rulemgt / src / main / java / org / onap / holmes / rulemgt / resources / RuleMgtResources.java
1 /**\r
2  * Copyright 2017-2020 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 lombok.extern.slf4j.Slf4j;\r
22 import org.jvnet.hk2.annotations.Service;\r
23 import org.onap.holmes.common.exception.CorrelationException;\r
24 import org.onap.holmes.common.utils.ExceptionUtil;\r
25 import org.onap.holmes.common.utils.GsonUtil;\r
26 import org.onap.holmes.common.utils.LanguageUtil;\r
27 import org.onap.holmes.common.utils.UserUtil;\r
28 import org.onap.holmes.rulemgt.bean.request.RuleCreateRequest;\r
29 import org.onap.holmes.rulemgt.bean.request.RuleDeleteRequest;\r
30 import org.onap.holmes.rulemgt.bean.request.RuleQueryCondition;\r
31 import org.onap.holmes.rulemgt.bean.request.RuleUpdateRequest;\r
32 import org.onap.holmes.rulemgt.bean.response.RuleAddAndUpdateResponse;\r
33 import org.onap.holmes.rulemgt.bean.response.RuleQueryListResponse;\r
34 import org.onap.holmes.rulemgt.constant.RuleMgtConstant;\r
35 import org.onap.holmes.rulemgt.wrapper.RuleMgtWrapper;\r
36 \r
37 import javax.inject.Inject;\r
38 import javax.servlet.http.HttpServletRequest;\r
39 import javax.ws.rs.*;\r
40 import javax.ws.rs.core.Context;\r
41 import javax.ws.rs.core.MediaType;\r
42 import java.util.Locale;\r
43 \r
44 @Service\r
45 @SwaggerDefinition\r
46 @Path("/rule")\r
47 @Api(tags = {"Holmes Rule Management"})\r
48 @Produces(MediaType.APPLICATION_JSON)\r
49 @Slf4j\r
50 public class RuleMgtResources {\r
51 \r
52     @Inject\r
53     private RuleMgtWrapper ruleMgtWrapper;\r
54 \r
55     @PUT\r
56     @Produces(MediaType.APPLICATION_JSON)\r
57     @ApiOperation(value = "Save a rule into the database; deploy it to the Drools engine if it is enabled.",\r
58             response = RuleAddAndUpdateResponse.class)\r
59     @Timed\r
60     public RuleAddAndUpdateResponse addCorrelationRule(@Context HttpServletRequest request,\r
61             @ApiParam(value =\r
62                     "The request entity of the HTTP call, which comprises \"ruleName\"(required), "\r
63                             + "\"loopControlName\"(required), \"content\"(required), \"enabled\"(required) "\r
64                             + "and \"description\"(optional)", required = true)\r
65                     RuleCreateRequest ruleCreateRequest) {\r
66         Locale locale = LanguageUtil.getLocale(request);\r
67         RuleAddAndUpdateResponse ruleChangeResponse;\r
68         try {\r
69             ruleChangeResponse = ruleMgtWrapper\r
70                     .addCorrelationRule(UserUtil.getUserName(request), ruleCreateRequest);\r
71             log.info("create rule:" + ruleCreateRequest.getRuleName() + " success.");\r
72             return ruleChangeResponse;\r
73         } catch (CorrelationException e) {\r
74             log.error("create rule:" + ruleCreateRequest.getRuleName() + " failed", e);\r
75             throw ExceptionUtil.buildExceptionResponse(e.getMessage());\r
76         }\r
77     }\r
78 \r
79     @POST\r
80     @Produces(MediaType.APPLICATION_JSON)\r
81     @ApiOperation(value = "Update an existing rule; deploy it to the Drools engine if it is enabled.", response = RuleAddAndUpdateResponse.class)\r
82     @Timed\r
83     public RuleAddAndUpdateResponse updateCorrelationRule(@Context HttpServletRequest request,\r
84             @ApiParam(value =\r
85                     "The request entity of the HTTP call, which comprises \"ruleId\"(required), "\r
86                             + "\"content\"(required), \"enabled\"(required) and \"description\"(optional)", required = true)\r
87                     RuleUpdateRequest ruleUpdateRequest) {\r
88         Locale locale = LanguageUtil.getLocale(request);\r
89         RuleAddAndUpdateResponse ruleChangeResponse;\r
90         try {\r
91             ruleChangeResponse = ruleMgtWrapper\r
92                     .updateCorrelationRule(UserUtil.getUserName(request), ruleUpdateRequest);\r
93             log.info("update rule:" + ruleUpdateRequest.getRuleId() + " successful");\r
94             return ruleChangeResponse;\r
95         } catch (CorrelationException e) {\r
96             log.error("update rule:" + ruleUpdateRequest.getContent() + " failed", e);\r
97             throw ExceptionUtil.buildExceptionResponse(e.getMessage());\r
98         }\r
99     }\r
100 \r
101     @DELETE\r
102     @Produces(MediaType.APPLICATION_JSON)\r
103     @ApiOperation(value = "Remove a rule from Holmes.")\r
104     @Timed\r
105     @Path("/{ruleid}")\r
106     public boolean deleteCorrelationRule(@Context HttpServletRequest request,\r
107             @PathParam("ruleid") String ruleId) {\r
108         Locale locale = LanguageUtil.getLocale(request);\r
109         try {\r
110             ruleMgtWrapper.deleteCorrelationRule(new RuleDeleteRequest(ruleId));\r
111             log.info("delete rule:" + ruleId + " successful");\r
112             return true;\r
113         } catch (CorrelationException e) {\r
114             log.error("delete rule:" + ruleId + " failed", e);\r
115             throw ExceptionUtil.buildExceptionResponse(e.getMessage());\r
116         }\r
117     }\r
118 \r
119     @GET\r
120     @Produces(MediaType.APPLICATION_JSON)\r
121     @ApiOperation(value = "Query rules using certain criteria.", response = RuleQueryListResponse.class)\r
122     @Timed\r
123     public RuleQueryListResponse getCorrelationRules(@Context HttpServletRequest request,\r
124             @ApiParam(value =\r
125                     "A JSON string used as a query parameter, which comprises \"ruleid\"(optional), "\r
126                             + "\"rulename\"(optional), \"creator\"(optional), "\r
127                             + "\"modifier\"(optional) and \"enabled\"(optional). E.g. {\"ruleid\":\"rule_1484727187317\"}",\r
128                     required = false) @QueryParam("queryrequest") String ruleQueryRequest) {\r
129         Locale locale = LanguageUtil.getLocale(request);\r
130         RuleQueryListResponse ruleQueryListResponse;\r
131 \r
132         RuleQueryCondition ruleQueryCondition = getRuleQueryCondition(ruleQueryRequest, request);\r
133         try {\r
134             ruleQueryListResponse = ruleMgtWrapper\r
135                     .getCorrelationRuleByCondition(ruleQueryCondition);\r
136             log.info("query rule successful by condition:" + ruleQueryCondition);\r
137             return ruleQueryListResponse;\r
138         } catch (CorrelationException e) {\r
139             log.error("query rule failed,cause query condition conversion failure", e);\r
140             throw ExceptionUtil.buildExceptionResponse(e.getMessage());\r
141         }\r
142     }\r
143 \r
144     private RuleQueryCondition getRuleQueryCondition(String queryRequest,\r
145             HttpServletRequest request) {\r
146         Locale locale = LanguageUtil.getLocale(request);\r
147         RuleQueryCondition ruleQueryCondition = GsonUtil\r
148                 .jsonToBean(queryRequest, RuleQueryCondition.class);\r
149         if (queryRequest == null) {\r
150             if (ruleQueryCondition == null) {\r
151                 ruleQueryCondition = new RuleQueryCondition();\r
152             }\r
153             ruleQueryCondition.setEnabled(RuleMgtConstant.STATUS_RULE_ALL);\r
154         } else if (queryRequest.indexOf("enabled") == -1) {\r
155             ruleQueryCondition.setEnabled(RuleMgtConstant.STATUS_RULE_ALL);\r
156         }\r
157         return ruleQueryCondition;\r
158     }\r
159 }\r