2 * Copyright 2017 ZTE Corporation.
\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
8 * http://www.apache.org/licenses/LICENSE-2.0
\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
16 package org.onap.holmes.rulemgt.wrapper;
\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.common.dmaap.DmaapService;
\r
27 import org.onap.holmes.rulemgt.bean.request.CorrelationCheckRule4Engine;
\r
28 import org.onap.holmes.rulemgt.bean.response.RuleResult4API;
\r
29 import org.onap.holmes.rulemgt.constant.RuleMgtConstant;
\r
30 import org.onap.holmes.rulemgt.db.CorrelationRuleDao;
\r
31 import org.onap.holmes.common.api.entity.CorrelationRule;
\r
32 import org.onap.holmes.common.exception.CorrelationException;
\r
33 import org.onap.holmes.common.utils.DbDaoUtil;
\r
34 import org.onap.holmes.rulemgt.bean.request.CorrelationDeployRule4Engine;
\r
35 import org.onap.holmes.rulemgt.bean.request.RuleCreateRequest;
\r
36 import org.onap.holmes.rulemgt.bean.request.RuleDeleteRequest;
\r
37 import org.onap.holmes.rulemgt.bean.request.RuleQueryCondition;
\r
38 import org.onap.holmes.rulemgt.bean.request.RuleUpdateRequest;
\r
39 import org.onap.holmes.rulemgt.bean.response.RuleAddAndUpdateResponse;
\r
40 import org.onap.holmes.rulemgt.bean.response.RuleQueryListResponse;
\r
41 import org.onap.holmes.rulemgt.bolt.enginebolt.EngineWrapper;
\r
42 import org.onap.holmes.rulemgt.db.CorrelationRuleQueryDao;
\r
48 public class RuleMgtWrapper {
\r
51 private CorrelationRuleQueryDao correlationRuleQueryDao;
\r
53 private EngineWrapper engineWarpper;
\r
55 private DbDaoUtil daoUtil;
\r
57 private CorrelationRuleDao correlationRuleDao;
\r
60 public void initDaoUtil() {
\r
61 correlationRuleDao = daoUtil.getJdbiDaoByOnDemand(CorrelationRuleDao.class);
\r
64 public RuleAddAndUpdateResponse addCorrelationRule(String creator, RuleCreateRequest ruleCreateRequest)
\r
65 throws CorrelationException {
\r
66 if (ruleCreateRequest == null) {
\r
67 throw new CorrelationException("The request object can not be empty!");
\r
69 CorrelationRule correlationRule = convertCreateRequest2Rule(creator,
\r
71 checkCorrelation(correlationRule);
\r
72 CorrelationRule ruleTemp = correlationRuleDao.queryRuleByRuleName(correlationRule.getName());
\r
73 if (ruleTemp != null) {
\r
74 throw new CorrelationException("A rule with the same name already exists.");
\r
76 String packageName = deployRule2Engine(correlationRule);
\r
77 correlationRule.setPackageName(packageName);
\r
78 CorrelationRule result = null;
\r
80 result = correlationRuleDao.saveRule(correlationRule);
\r
81 } catch (CorrelationException e) {
\r
82 engineWarpper.deleteRuleFromEngine(packageName);
\r
83 throw new CorrelationException(e.getMessage());
\r
85 RuleAddAndUpdateResponse ruleAddAndUpdateResponse = new RuleAddAndUpdateResponse();
\r
86 ruleAddAndUpdateResponse.setRuleId(result.getRid());
\r
87 return ruleAddAndUpdateResponse;
\r
90 public RuleAddAndUpdateResponse updateCorrelationRule(String modifier, RuleUpdateRequest ruleUpdateRequest)
\r
91 throws CorrelationException {
\r
92 if (ruleUpdateRequest == null) {
\r
93 throw new CorrelationException("The request object can not be empty!");
\r
95 CorrelationRule oldCorrelationRule = correlationRuleDao.queryRuleByRid(ruleUpdateRequest.getRuleId());
\r
96 if (oldCorrelationRule == null) {
\r
97 throw new CorrelationException("You're trying to update a rule which does not exist in the system.");
\r
99 CorrelationRule newCorrelationRule = convertRuleUpdateRequest2CorrelationRule(modifier,
\r
100 ruleUpdateRequest, oldCorrelationRule.getName());
\r
101 checkCorrelation(newCorrelationRule);
\r
102 RuleAddAndUpdateResponse ruleChangeResponse = new RuleAddAndUpdateResponse();
\r
103 ruleChangeResponse.setRuleId(newCorrelationRule.getRid());
\r
104 if (!haveChange(newCorrelationRule, oldCorrelationRule)) {
\r
105 return ruleChangeResponse;
\r
107 if (oldCorrelationRule.getEnabled() == RuleMgtConstant.STATUS_RULE_OPEN) {
\r
108 engineWarpper.deleteRuleFromEngine(oldCorrelationRule.getPackageName());
\r
110 newCorrelationRule.setPackageName(deployRule2Engine(newCorrelationRule));
\r
111 correlationRuleDao.updateRule(newCorrelationRule);
\r
112 return ruleChangeResponse;
\r
115 private void checkCorrelation(CorrelationRule correlationRule) throws CorrelationException {
\r
116 int enabled = correlationRule.getEnabled();
\r
117 String ruleName = correlationRule.getName() == null ? "" : correlationRule.getName().trim();
\r
118 String content = correlationRule.getContent() == null ? "" : correlationRule.getContent().trim();
\r
119 if ("".equals(content)) {
\r
120 throw new CorrelationException("The contents of the rule can not be empty!");
\r
122 if (enabled != RuleMgtConstant.STATUS_RULE_CLOSE
\r
123 && enabled != RuleMgtConstant.STATUS_RULE_OPEN) {
\r
124 throw new CorrelationException("Invalid rule status. Only 0 (disabled) and 1 (enabled) are allowed.");
\r
126 if ("".equals(ruleName)) {
\r
127 throw new CorrelationException("The name of the rule can not be empty.");
\r
131 private boolean haveChange(CorrelationRule newCorrelationRule, CorrelationRule oldCorrelationRule) {
\r
132 String newContent = newCorrelationRule.getContent();
\r
133 String oldContent = oldCorrelationRule.getContent();
\r
134 int newEnabled = newCorrelationRule.getEnabled();
\r
135 int oldEnabled = oldCorrelationRule.getEnabled();
\r
136 String newDes = newCorrelationRule.getDescription();
\r
137 String oldDes = oldCorrelationRule.getDescription();
\r
138 String oldControlLoop = oldCorrelationRule.getClosedControlLoopName();
\r
139 String newControlLoop = newCorrelationRule.getClosedControlLoopName();
\r
140 if (newContent.equals(oldContent) && newEnabled == oldEnabled
\r
141 && newDes.equals(oldDes) && newControlLoop.equals(oldControlLoop)) {
\r
147 public void deleteCorrelationRule(RuleDeleteRequest ruleDeleteRequest)
\r
148 throws CorrelationException {
\r
149 if (ruleDeleteRequest == null) {
\r
150 throw new CorrelationException("The request object can not be empty!");
\r
152 CorrelationRule correlationRule = correlationRuleDao.queryRuleByRid(ruleDeleteRequest.getRuleId());
\r
153 if (correlationRule == null) {
\r
154 log.warn("the rule:rule id=" + ruleDeleteRequest.getRuleId() + " does not exist the database.");
\r
155 throw new CorrelationException("You're trying to delete a rule which does not exist in the system.");
\r
157 if (correlationRule.getEnabled() == RuleMgtConstant.STATUS_RULE_OPEN) {
\r
158 engineWarpper.deleteRuleFromEngine(correlationRule.getPackageName());
\r
160 correlationRuleDao.deleteRule(correlationRule);
\r
163 private CorrelationRule convertCreateRequest2Rule(String userName,
\r
164 RuleCreateRequest ruleCreateRequest) throws CorrelationException {
\r
165 String tempContent = ruleCreateRequest.getContent();
\r
166 CorrelationRule correlationRule = new CorrelationRule();
\r
167 String ruleId = "rule_" + System.currentTimeMillis();
\r
168 String description = ruleCreateRequest.getDescription() == null ? "" : ruleCreateRequest.getDescription();
\r
169 correlationRule.setRid(ruleId);
\r
170 if (tempContent != null) {
\r
171 correlationRule.setContent(tempContent.trim());
\r
173 correlationRule.setDescription(description);
\r
174 correlationRule.setCreateTime(new Date());
\r
175 correlationRule.setUpdateTime(new Date());
\r
176 correlationRule.setName(ruleCreateRequest.getRuleName());
\r
177 correlationRule.setEngineID("correlation-d");
\r
178 correlationRule.setEngineType("");
\r
179 correlationRule.setTemplateID(0);
\r
180 correlationRule.setVendor("");
\r
181 correlationRule.setCreator(userName);
\r
182 correlationRule.setModifier(userName);
\r
183 correlationRule.setEnabled(ruleCreateRequest.getEnabled());
\r
184 correlationRule.setClosedControlLoopName(ruleCreateRequest.getLoopControlName());
\r
185 return correlationRule;
\r
188 private CorrelationRule convertRuleUpdateRequest2CorrelationRule(String modifier,
\r
189 RuleUpdateRequest ruleUpdateRequest, String ruleName) throws CorrelationException {
\r
190 CorrelationRule correlationRule = new CorrelationRule();
\r
191 String description = ruleUpdateRequest.getDescription() == null ? "" : ruleUpdateRequest.getDescription();
\r
192 correlationRule.setRid(ruleUpdateRequest.getRuleId());
\r
193 correlationRule.setContent(ruleUpdateRequest.getContent());
\r
194 correlationRule.setDescription(description);
\r
195 correlationRule.setEnabled(ruleUpdateRequest.getEnabled());
\r
196 correlationRule.setUpdateTime(new Date());
\r
197 correlationRule.setModifier(modifier);
\r
198 correlationRule.setName(ruleName);
\r
199 correlationRule.setClosedControlLoopName(ruleUpdateRequest.getLoopControlName());
\r
200 return correlationRule;
\r
203 private String deployRule2Engine(CorrelationRule correlationRule)
\r
204 throws CorrelationException {
\r
205 if (engineWarpper.checkRuleFromEngine(correlationRules2CheckRule(correlationRule)) && (
\r
206 correlationRule.getEnabled() == RuleMgtConstant.STATUS_RULE_OPEN)) {
\r
207 return engineWarpper.deployEngine(correlationRules2DeployRule(correlationRule));
\r
212 public RuleQueryListResponse getCorrelationRuleByCondition(
\r
213 RuleQueryCondition ruleQueryCondition) throws CorrelationException {
\r
214 List<CorrelationRule> correlationRule = correlationRuleQueryDao
\r
215 .getCorrelationRulesByCondition(ruleQueryCondition);
\r
216 RuleQueryListResponse ruleQueryListResponse = new RuleQueryListResponse();
\r
217 ruleQueryListResponse.setTotalCount(correlationRule.size());
\r
218 ruleQueryListResponse
\r
219 .setCorrelationRules(correlationRules2RuleResult4APIs(correlationRule));
\r
220 return ruleQueryListResponse;
\r
223 private List<RuleResult4API> correlationRules2RuleResult4APIs(
\r
224 List<CorrelationRule> correlationRules) {
\r
225 List<RuleResult4API> ruleResult4APIs = new ArrayList<RuleResult4API>();
\r
226 for (CorrelationRule correlationRule : correlationRules) {
\r
227 RuleResult4API ruleResult4API = new RuleResult4API();
\r
228 String description = correlationRule.getDescription() == null ? "" : correlationRule.getDescription();
\r
229 ruleResult4API.setRuleId(correlationRule.getRid());
\r
230 ruleResult4API.setRuleName(correlationRule.getName());
\r
231 ruleResult4API.setDescription(description);
\r
232 ruleResult4API.setContent(correlationRule.getContent());
\r
233 ruleResult4API.setCreateTime(correlationRule.getCreateTime());
\r
234 ruleResult4API.setCreator(correlationRule.getCreator());
\r
235 ruleResult4API.setUpdateTime(correlationRule.getUpdateTime());
\r
236 ruleResult4API.setModifier(correlationRule.getModifier());
\r
237 ruleResult4API.setEnabled(correlationRule.getEnabled());
\r
238 ruleResult4API.setClosedControlLoopName(correlationRule.getClosedControlLoopName());
\r
239 ruleResult4APIs.add(ruleResult4API);
\r
241 return ruleResult4APIs;
\r
244 private CorrelationDeployRule4Engine correlationRules2DeployRule(
\r
245 CorrelationRule correlationRule) {
\r
246 CorrelationDeployRule4Engine correlationDeployRule4Engine = new CorrelationDeployRule4Engine();
\r
247 correlationDeployRule4Engine.setContent(correlationRule.getContent());
\r
248 correlationDeployRule4Engine.setEngineId(correlationRule.getEngineID());
\r
249 correlationDeployRule4Engine.setLoopControlName(correlationRule.getClosedControlLoopName());
\r
250 return correlationDeployRule4Engine;
\r
253 private CorrelationCheckRule4Engine correlationRules2CheckRule(
\r
254 CorrelationRule correlationRule) {
\r
255 CorrelationCheckRule4Engine correlationCheckRule4Engine = new CorrelationCheckRule4Engine();
\r
256 correlationCheckRule4Engine.setContent(correlationRule.getContent());
\r
257 return correlationCheckRule4Engine;
\r