Change the groupid from openo to onap
[holmes/rule-management.git] / rulemgt / src / main / java / org / onap / holmes / rulemgt / wrapper / RuleMgtWrapper.java
1 /**\r
2  * Copyright 2017 ZTE Corporation.\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 package org.onap.holmes.rulemgt.wrapper;\r
17 \r
18 import java.util.ArrayList;\r
19 import java.util.Date;\r
20 import java.util.List;\r
21 import javax.annotation.PostConstruct;\r
22 import javax.inject.Inject;\r
23 import javax.inject.Singleton;\r
24 import lombok.extern.slf4j.Slf4j;\r
25 import org.jvnet.hk2.annotations.Service;\r
26 import org.onap.holmes.rulemgt.bean.request.CorrelationCheckRule4Engine;\r
27 import org.onap.holmes.rulemgt.bean.response.RuleResult4API;\r
28 import org.onap.holmes.rulemgt.constant.RuleMgtConstant;\r
29 import org.onap.holmes.rulemgt.db.CorrelationRuleDao;\r
30 import org.onap.holmes.common.api.entity.CorrelationRule;\r
31 import org.onap.holmes.common.exception.CorrelationException;\r
32 import org.onap.holmes.common.utils.DbDaoUtil;\r
33 import org.onap.holmes.rulemgt.bean.request.CorrelationDeployRule4Engine;\r
34 import org.onap.holmes.rulemgt.bean.request.RuleCreateRequest;\r
35 import org.onap.holmes.rulemgt.bean.request.RuleDeleteRequest;\r
36 import org.onap.holmes.rulemgt.bean.request.RuleQueryCondition;\r
37 import org.onap.holmes.rulemgt.bean.request.RuleUpdateRequest;\r
38 import org.onap.holmes.rulemgt.bean.response.RuleAddAndUpdateResponse;\r
39 import org.onap.holmes.rulemgt.bean.response.RuleQueryListResponse;\r
40 import org.onap.holmes.rulemgt.bolt.enginebolt.EngineWrapper;\r
41 import org.onap.holmes.rulemgt.db.CorrelationRuleQueryDao;\r
42 \r
43 \r
44 @Service\r
45 @Singleton\r
46 @Slf4j\r
47 public class RuleMgtWrapper {\r
48 \r
49     @Inject\r
50     private CorrelationRuleQueryDao correlationRuleQueryDao;\r
51     @Inject\r
52     private EngineWrapper engineWarpper;\r
53     @Inject\r
54     private DbDaoUtil daoUtil;\r
55 \r
56     private CorrelationRuleDao correlationRuleDao;\r
57 \r
58     @PostConstruct\r
59     public void initDaoUtil() {\r
60         correlationRuleDao = daoUtil.getJdbiDaoByOnDemand(CorrelationRuleDao.class);\r
61     }\r
62 \r
63     public RuleAddAndUpdateResponse addCorrelationRule(String creator, RuleCreateRequest ruleCreateRequest)\r
64             throws CorrelationException {\r
65         if (ruleCreateRequest == null) {\r
66             throw new CorrelationException("The request object can not be empty!");\r
67         }\r
68         CorrelationRule correlationRule = convertCreateRequest2Rule(creator,\r
69                 ruleCreateRequest);\r
70         checkCorrelation(correlationRule);\r
71         CorrelationRule ruleTemp = correlationRuleDao.queryRuleByRuleName(correlationRule.getName());\r
72         if (ruleTemp != null) {\r
73             throw new CorrelationException("A rule with the same name already exists.");\r
74         }\r
75         correlationRule.setPackageName(deployRule2Engine(correlationRule));\r
76         CorrelationRule result = correlationRuleDao.saveRule(correlationRule);\r
77         RuleAddAndUpdateResponse ruleAddAndUpdateResponse = new RuleAddAndUpdateResponse();\r
78         ruleAddAndUpdateResponse.setRuleId(result.getRid());\r
79         return ruleAddAndUpdateResponse;\r
80     }\r
81 \r
82     public RuleAddAndUpdateResponse updateCorrelationRule(String modifier, RuleUpdateRequest ruleUpdateRequest)\r
83             throws CorrelationException {\r
84         if (ruleUpdateRequest == null) {\r
85             throw new CorrelationException("The request object can not be empty!");\r
86         }\r
87         CorrelationRule oldCorrelationRule = correlationRuleDao.queryRuleByRid(ruleUpdateRequest.getRuleId());\r
88         if (oldCorrelationRule == null) {\r
89             throw new CorrelationException("You're trying to update a rule which does not exist in the system.");\r
90         }\r
91         CorrelationRule newCorrelationRule = convertRuleUpdateRequest2CorrelationRule(modifier,\r
92                 ruleUpdateRequest, oldCorrelationRule.getName());\r
93         checkCorrelation(newCorrelationRule);\r
94         RuleAddAndUpdateResponse ruleChangeResponse = new RuleAddAndUpdateResponse();\r
95         ruleChangeResponse.setRuleId(newCorrelationRule.getRid());\r
96         if (!haveChange(newCorrelationRule, oldCorrelationRule)) {\r
97             return ruleChangeResponse;\r
98         }\r
99         if (oldCorrelationRule.getEnabled() == RuleMgtConstant.STATUS_RULE_OPEN) {\r
100             engineWarpper.deleteRuleFromEngine(oldCorrelationRule.getPackageName());\r
101         }\r
102         newCorrelationRule.setPackageName(deployRule2Engine(newCorrelationRule));\r
103         correlationRuleDao.updateRule(newCorrelationRule);\r
104         return ruleChangeResponse;\r
105     }\r
106 \r
107     private void checkCorrelation(CorrelationRule correlationRule) throws CorrelationException {\r
108         int enabled = correlationRule.getEnabled();\r
109         String ruleName = correlationRule.getName() == null ? "" : correlationRule.getName().trim();\r
110         String content = correlationRule.getContent() == null ? "" : correlationRule.getContent().trim();\r
111         if ("".equals(content)) {\r
112             throw new CorrelationException("The contents of the rule can not be empty!");\r
113         }\r
114         if (enabled != RuleMgtConstant.STATUS_RULE_CLOSE\r
115                 && enabled != RuleMgtConstant.STATUS_RULE_OPEN) {\r
116             throw new CorrelationException("Invalid rule status. Only 0 (disabled) and 1 (enabled) are allowed.");\r
117         }\r
118         if ("".equals(ruleName)) {\r
119             throw new CorrelationException("The name of the rule can not be empty.");\r
120         }\r
121     }\r
122 \r
123     private boolean haveChange(CorrelationRule newCorrelationRule, CorrelationRule oldCorrelationRule) {\r
124         String newContent = newCorrelationRule.getContent();\r
125         String oldContent = oldCorrelationRule.getContent();\r
126         int newEnabled = newCorrelationRule.getEnabled();\r
127         int oldEnabled = oldCorrelationRule.getEnabled();\r
128         String newDes = newCorrelationRule.getDescription();\r
129         String oldDes = oldCorrelationRule.getDescription();\r
130         if (newContent.equals(oldContent) && newEnabled == oldEnabled && newDes.equals(oldDes)) {\r
131             return false;\r
132         }\r
133         return true;\r
134     }\r
135 \r
136     public void deleteCorrelationRule(RuleDeleteRequest ruleDeleteRequest)\r
137             throws CorrelationException {\r
138         if (ruleDeleteRequest == null) {\r
139             throw new CorrelationException("The request object can not be empty!");\r
140         }\r
141         CorrelationRule correlationRule = correlationRuleDao.queryRuleByRid(ruleDeleteRequest.getRuleId());\r
142         if (correlationRule == null) {\r
143             log.warn("the rule:rule id=" + ruleDeleteRequest.getRuleId() + " does not exist the database.");\r
144             throw new CorrelationException("You're trying to delete a rule which does not exist in the system.");\r
145         }\r
146         if (correlationRule.getEnabled() == RuleMgtConstant.STATUS_RULE_OPEN) {\r
147             engineWarpper.deleteRuleFromEngine(correlationRule.getPackageName());\r
148         }\r
149         correlationRuleDao.deleteRule(correlationRule);\r
150     }\r
151 \r
152     private CorrelationRule convertCreateRequest2Rule(String userName,\r
153             RuleCreateRequest ruleCreateRequest) throws CorrelationException {\r
154         String tempContent = ruleCreateRequest.getContent();\r
155         CorrelationRule correlationRule = new CorrelationRule();\r
156         String ruleId = "rule_" + System.currentTimeMillis();\r
157         String description = ruleCreateRequest.getDescription() == null ? "" : ruleCreateRequest.getDescription();\r
158         correlationRule.setRid(ruleId);\r
159         if (tempContent != null) {\r
160             correlationRule.setContent(tempContent.trim());\r
161         }\r
162         correlationRule.setDescription(description);\r
163         correlationRule.setCreateTime(new Date());\r
164         correlationRule.setUpdateTime(new Date());\r
165         correlationRule.setName(ruleCreateRequest.getRuleName());\r
166         correlationRule.setEngineID("correlation-d");\r
167         correlationRule.setEngineType("");\r
168         correlationRule.setTemplateID(0);\r
169         correlationRule.setVendor("");\r
170         correlationRule.setCreator(userName);\r
171         correlationRule.setModifier(userName);\r
172         correlationRule.setEnabled(ruleCreateRequest.getEnabled());\r
173         return correlationRule;\r
174     }\r
175 \r
176     private CorrelationRule convertRuleUpdateRequest2CorrelationRule(String modifier,\r
177             RuleUpdateRequest ruleUpdateRequest, String ruleName) throws CorrelationException {\r
178         CorrelationRule correlationRule = new CorrelationRule();\r
179         String description = ruleUpdateRequest.getDescription() == null ? "" : ruleUpdateRequest.getDescription();\r
180         correlationRule.setRid(ruleUpdateRequest.getRuleId());\r
181         correlationRule.setContent(ruleUpdateRequest.getContent());\r
182         correlationRule.setDescription(description);\r
183         correlationRule.setEnabled(ruleUpdateRequest.getEnabled());\r
184         correlationRule.setUpdateTime(new Date());\r
185         correlationRule.setModifier(modifier);\r
186         correlationRule.setName(ruleName);\r
187         return correlationRule;\r
188     }\r
189 \r
190     private String deployRule2Engine(CorrelationRule correlationRule)\r
191             throws CorrelationException {\r
192         if (engineWarpper.checkRuleFromEngine(correlationRules2CheckRule(correlationRule)) && (\r
193                 correlationRule.getEnabled() == RuleMgtConstant.STATUS_RULE_OPEN)) {\r
194             return engineWarpper.deployEngine(correlationRules2DeployRule(correlationRule));\r
195         }\r
196         return "";\r
197     }\r
198 \r
199     public RuleQueryListResponse getCorrelationRuleByCondition(\r
200             RuleQueryCondition ruleQueryCondition) throws CorrelationException {\r
201         List<CorrelationRule> correlationRule = correlationRuleQueryDao\r
202                 .getCorrelationRulesByCondition(ruleQueryCondition);\r
203         RuleQueryListResponse ruleQueryListResponse = new RuleQueryListResponse();\r
204         ruleQueryListResponse.setTotalCount(correlationRule.size());\r
205         ruleQueryListResponse\r
206                 .setCorrelationRules(correlationRules2RuleResult4APIs(correlationRule));\r
207         return ruleQueryListResponse;\r
208     }\r
209 \r
210     private List<RuleResult4API> correlationRules2RuleResult4APIs(\r
211             List<CorrelationRule> correlationRules) {\r
212         List<RuleResult4API> ruleResult4APIs = new ArrayList<RuleResult4API>();\r
213         for (CorrelationRule correlationRule : correlationRules) {\r
214             RuleResult4API ruleResult4API = new RuleResult4API();\r
215             String description = correlationRule.getDescription() == null ? "" : correlationRule.getDescription();\r
216             ruleResult4API.setRuleId(correlationRule.getRid());\r
217             ruleResult4API.setRuleName(correlationRule.getName());\r
218             ruleResult4API.setDescription(description);\r
219             ruleResult4API.setContent(correlationRule.getContent());\r
220             ruleResult4API.setCreateTime(correlationRule.getCreateTime());\r
221             ruleResult4API.setCreator(correlationRule.getCreator());\r
222             ruleResult4API.setUpdateTime(correlationRule.getUpdateTime());\r
223             ruleResult4API.setModifier(correlationRule.getModifier());\r
224             ruleResult4API.setEnabled(correlationRule.getEnabled());\r
225             ruleResult4APIs.add(ruleResult4API);\r
226         }\r
227         return ruleResult4APIs;\r
228     }\r
229 \r
230     private CorrelationDeployRule4Engine correlationRules2DeployRule(\r
231             CorrelationRule correlationRule) {\r
232         CorrelationDeployRule4Engine correlationDeployRule4Engine = new CorrelationDeployRule4Engine();\r
233         correlationDeployRule4Engine.setContent(correlationRule.getContent());\r
234         correlationDeployRule4Engine.setEngineId(correlationRule.getEngineID());\r
235         return correlationDeployRule4Engine;\r
236     }\r
237 \r
238     private CorrelationCheckRule4Engine correlationRules2CheckRule(\r
239             CorrelationRule correlationRule) {\r
240         CorrelationCheckRule4Engine correlationCheckRule4Engine = new CorrelationCheckRule4Engine();\r
241         correlationCheckRule4Engine.setContent(correlationRule.getContent());\r
242         return correlationCheckRule4Engine;\r
243     }\r
244 }\r