DCAE-D be initial commit
[sdc/dcae-d/dt-be-main.git] / dcaedt_be / src / main / java / org / onap / sdc / dcae / rule / editor / validators / RuleValidator.java
1 package org.onap.sdc.dcae.rule.editor.validators;
2
3 import org.onap.sdc.dcae.composition.restmodels.ruleeditor.ActionTypeEnum;
4 import org.onap.sdc.dcae.composition.restmodels.ruleeditor.BaseAction;
5 import org.onap.sdc.dcae.composition.restmodels.ruleeditor.BaseCondition;
6 import org.onap.sdc.dcae.composition.restmodels.ruleeditor.Rule;
7 import org.onap.sdc.dcae.errormng.ActionStatus;
8 import org.onap.sdc.dcae.errormng.ErrConfMgr;
9 import org.onap.sdc.dcae.errormng.ResponseFormat;
10 import org.onap.sdc.dcae.errormng.ServiceException;
11 import org.onap.sdc.dcae.rule.editor.enums.RuleEditorElementType;
12 import org.onap.sdc.dcae.rule.editor.utils.ValidationUtils;
13 import org.springframework.util.CollectionUtils;
14
15 import java.util.List;
16
17 public class RuleValidator implements IRuleElementValidator<Rule> {
18
19         private static RuleValidator ruleValidator = new RuleValidator();
20
21         public static RuleValidator getInstance() {
22                 return ruleValidator;
23         }
24
25         private RuleValidator(){}
26
27
28         public boolean validate(Rule rule, List<ResponseFormat> errors) {
29                 boolean valid = true;
30                 if(rule.isConditionalRule())
31                         valid = getConditionValidator(rule.getCondition()).validate(rule.getCondition(), errors);
32                 if(!ValidationUtils.validateNotEmpty(rule.getDescription())) {
33                         valid = false;
34                         errors.add(ErrConfMgr.INSTANCE.getResponseFormat(ActionStatus.MISSING_RULE_DESCRIPTION, null, null));
35                 }
36                 if(CollectionUtils.isEmpty(rule.getActions())) {
37                         valid = false;
38                         errors.add(ErrConfMgr.INSTANCE.getResponseFormat(ActionStatus.MISSING_ACTION, null, null));
39                 } else {
40                         valid = rule.getActions().stream()
41                                         .map(a -> getActionValidator(a).validate(a, errors))
42                                         .reduce(true, (x,y) -> x && y) && valid;
43                 }
44                 return valid;
45         }
46
47
48         private IRuleElementValidator getActionValidator(BaseAction action) {
49                 ActionTypeEnum type = ActionTypeEnum.getTypeByName(action.getActionType());
50                 return RuleEditorElementType.getElementTypeByName(type.getType()).getValidator();
51         }
52
53         private IRuleElementValidator getConditionValidator(BaseCondition condition) {
54                 return RuleEditorElementType.getElementTypeByName(condition.getClass().getSimpleName()).getValidator();
55         }
56 }