summaryrefslogtreecommitdiffstats
path: root/dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor
diff options
context:
space:
mode:
Diffstat (limited to 'dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor')
-rw-r--r--dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/impl/RulesBusinessLogic.java17
-rw-r--r--dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/translators/MappingRulesTranslator.java34
-rw-r--r--dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/translators/RuleTranslator.java37
-rw-r--r--dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/utils/RulesPayloadUtils.java10
-rw-r--r--dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/validators/ConditionValidator.java7
-rw-r--r--dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/validators/MappingRulesValidator.java31
6 files changed, 70 insertions, 66 deletions
diff --git a/dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/impl/RulesBusinessLogic.java b/dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/impl/RulesBusinessLogic.java
index 468a6d5..ced922b 100644
--- a/dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/impl/RulesBusinessLogic.java
+++ b/dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/impl/RulesBusinessLogic.java
@@ -10,6 +10,7 @@ import org.onap.sdc.dcae.errormng.ActionStatus;
import org.onap.sdc.dcae.errormng.ErrConfMgr;
import org.onap.sdc.dcae.errormng.ResponseFormat;
import org.onap.sdc.dcae.errormng.ServiceException;
+import org.onap.sdc.dcae.rule.editor.enums.RuleEditorElementType;
import org.onap.sdc.dcae.rule.editor.translators.MappingRulesTranslator;
import org.onap.sdc.dcae.rule.editor.utils.EmptyStringTranslationSerializer;
import org.onap.sdc.dcae.rule.editor.utils.ValidationUtils;
@@ -22,7 +23,6 @@ import java.util.*;
import java.util.function.BiFunction;
import java.util.function.Function;
import java.util.stream.Collectors;
-import java.util.stream.Stream;
@Component
public class RulesBusinessLogic {
@@ -33,6 +33,13 @@ public class RulesBusinessLogic {
private MappingRulesTranslator mappingRulesTranslator = MappingRulesTranslator.getInstance();
private static Gson gsonTranslator = new GsonBuilder().registerTypeAdapter(String.class, new EmptyStringTranslationSerializer()).enableComplexMapKeySerialization().create();
+
+ public List<ServiceException> validateFilter(BaseCondition filter) {
+ List<ResponseFormat> errors = new ArrayList<>();
+ RuleEditorElementType.getElementTypeByName(filter.getClass().getSimpleName()).getValidator().validate(filter, errors);
+ return errors.stream().map(r -> r.getRequestError().getServiceException()).collect(Collectors.toList());
+ }
+
public List<ServiceException> validateRule(Rule rule) {
List<ResponseFormat> errors = new ArrayList<>();
if(ruleValidator.validate(rule, errors)) {
@@ -43,7 +50,7 @@ public class RulesBusinessLogic {
public List<ServiceException> validateImportedRules(MappingRules rules) {
List<ResponseFormat> errors = new ArrayList<>();
- if(mappingRulesValidator.validate(rules, errors)){
+ if(mappingRulesValidator.validate(rules, errors)) {
rules.getRules().forEach((k,v) -> {
v.setUid(k);
detectAndResolveActionDependencies(v, errors);
@@ -80,6 +87,7 @@ public class RulesBusinessLogic {
}
+ // when saving a single rule its declared format (supportGroups) must match the existing rules format (a single match is enough as all previously saved rules were already validated)
public boolean validateGroupDefinitions(MappingRules rules, boolean supportGroups) {
return supportGroups == rules.getRules().values().stream().anyMatch(r -> ValidationUtils.validateNotEmpty(r.getGroupId()));
}
@@ -184,11 +192,6 @@ public class RulesBusinessLogic {
rules.setRules(rulesMap);
}
- public boolean validateTranslateRequestFields(TranslateRequest request) {
- return Stream.of(request.getVfcmtUuid(), request.getDcaeCompLabel(), request.getNid(), request.getConfigParam(), request.getPublishPhase(), request.getEntryPhase()).allMatch(ValidationUtils::validateNotEmpty)
- && !request.getEntryPhase().equalsIgnoreCase(request.getPublishPhase());
- }
-
public void updateGlobalTranslationFields(MappingRules mappingRules, TranslateRequest request, String vfcmtName) {
mappingRules.setEntryPhase(request.getEntryPhase());
mappingRules.setPublishPhase(request.getPublishPhase());
diff --git a/dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/translators/MappingRulesTranslator.java b/dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/translators/MappingRulesTranslator.java
index cefb429..06f0bab 100644
--- a/dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/translators/MappingRulesTranslator.java
+++ b/dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/translators/MappingRulesTranslator.java
@@ -19,7 +19,6 @@ public class MappingRulesTranslator implements IRuleElementTranslator<MappingRul
}
private RuleTranslator ruleTranslator = RuleTranslator.getInstance();
- private ConditionTranslator conditionTranslator = ConditionTranslator.getInstance();
public Object translateToHpJson(MappingRules mappingRules) {
return new MappingRulesTranslation(mappingRules);
@@ -56,40 +55,9 @@ public class MappingRulesTranslator implements IRuleElementTranslator<MappingRul
firstRunPhase = phaseNames.get(0);
}
//hardcoded entry point processor - added as a phase unit
- processing.add(0, new RunPhaseRuleTranslation(mappingRules.getEntryPhase(), firstRunPhase, mappingRules.getNotifyId()));
+ processing.add(0, ruleTranslator.entryPhaseTranslation(mappingRules.getEntryPhase(), firstRunPhase, mappingRules.getFilter()));
//hardcoded map_publish processor - added as processor unit to last phase unit
((RuleTranslation)processing.get(processing.size()-1)).processors.add(new RunPhaseProcessorsTranslation(mappingRules.getPublishPhase()));
}
}
-
-
- private class RunPhaseRuleTranslation extends RuleTranslation {
-
- private RunPhaseRuleTranslation(String phaseName, String runPhase) {
- phase = phaseName;
- processors.add(new RunPhaseProcessorsTranslation(runPhase));
- }
-
- private RunPhaseRuleTranslation(String phaseName, String runPhase, String notifyOid) {
- this(phaseName, runPhase);
- if("snmp_map".equals(phaseName)) {
- processors.add(0, new SnmpConvertor());
- }
- if(ValidationUtils.validateTargetField(notifyOid)) {
- filter = conditionTranslator.notifyOidTranslation(notifyOid);
- }
- }
- }
-
- // hardcoded SNMP processor
- private class SnmpConvertor extends ProcessorTranslation {
- private String array = "varbinds";
- private String datacolumn = "varbind_value";
- private String keycolumn = "varbind_oid";
-
- private SnmpConvertor() {
- clazz = "SnmpConvertor";
- }
- }
-
}
diff --git a/dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/translators/RuleTranslator.java b/dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/translators/RuleTranslator.java
index bce3980..c652923 100644
--- a/dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/translators/RuleTranslator.java
+++ b/dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/translators/RuleTranslator.java
@@ -30,6 +30,36 @@ public class RuleTranslator implements IRuleElementTranslator<Rule> {
}
}
+ private class EntryPhaseTranslation extends RuleTranslation {
+
+ private EntryPhaseTranslation(String phaseName, String runPhase) {
+ phase = phaseName;
+ processors.add(new RunPhaseProcessorsTranslation(runPhase));
+ }
+
+ private EntryPhaseTranslation(String phaseName, String runPhase, BaseCondition entryPhaseFilter) {
+ this(phaseName, runPhase);
+ if("snmp_map".equals(phaseName)) {
+ processors.add(0, new SnmpConvertor());
+ }
+ if(null != entryPhaseFilter) {
+ filter = getConditionTranslator(entryPhaseFilter).translateToHpJson(entryPhaseFilter);
+ }
+ }
+ }
+
+ // hardcoded SNMP processor
+
+ private class SnmpConvertor extends ProcessorTranslation {
+ private String array = "varbinds";
+ private String datacolumn = "varbind_value";
+ private String keycolumn = "varbind_oid";
+
+ private SnmpConvertor() {
+ clazz = "SnmpConvertor";
+ }
+ }
+
public Object translateToHpJson(Rule rule) {
debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), "Start translating rule {}", rule.getUid());
Object translation = new ActionRuleTranslation(rule);
@@ -37,6 +67,13 @@ public class RuleTranslator implements IRuleElementTranslator<Rule> {
return translation;
}
+ public Object entryPhaseTranslation(String entryPhase, String runPhase, BaseCondition entryPhaseFilter) {
+ debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), "Start translating entry phase {}", entryPhase);
+ Object translation = new EntryPhaseTranslation(entryPhase, runPhase, entryPhaseFilter);
+ debugLogger.log(LogLevel.DEBUG, this.getClass().getName(), "Finished translation for entry phase {}. Result: {}", entryPhase, new Gson().toJson(translation));
+ return translation;
+ }
+
private IRuleElementTranslator getConditionTranslator(BaseCondition condition){
return condition instanceof ConditionGroup ? ConditionGroupTranslator.getInstance() :
getSimpleConditionTranslator((Condition) condition);
diff --git a/dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/utils/RulesPayloadUtils.java b/dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/utils/RulesPayloadUtils.java
index 8391d76..4422da5 100644
--- a/dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/utils/RulesPayloadUtils.java
+++ b/dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/utils/RulesPayloadUtils.java
@@ -22,15 +22,19 @@ public class RulesPayloadUtils {
private RulesPayloadUtils(){}
public static Rule parsePayloadToRule(String payload) {
- return gson.fromJson(payload, Rule.class);
+ return convertFromPayload(payload, Rule.class);
}
public static MappingRules parseMappingRulesArtifactPayload(String payload) {
- return gson.fromJson(payload, MappingRules.class);
+ return convertFromPayload(payload, MappingRules.class);
}
public static MappingRulesResponse parsePayloadToMappingRules(String payload) {
- return gson.fromJson(payload, MappingRulesResponse.class);
+ return convertFromPayload(payload, MappingRulesResponse.class);
+ }
+
+ public static <T> T convertFromPayload(String payload, Class<T> type) {
+ return gson.fromJson(payload, type);
}
public static SchemaInfo extractInfoFromDescription(Artifact rulesArtifact) {
diff --git a/dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/validators/ConditionValidator.java b/dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/validators/ConditionValidator.java
index 9ba4479..4fa32a3 100644
--- a/dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/validators/ConditionValidator.java
+++ b/dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/validators/ConditionValidator.java
@@ -1,12 +1,12 @@
package org.onap.sdc.dcae.rule.editor.validators;
+import org.apache.commons.lang.StringUtils;
import org.onap.sdc.dcae.composition.restmodels.ruleeditor.Condition;
import org.onap.sdc.dcae.errormng.ActionStatus;
import org.onap.sdc.dcae.errormng.ErrConfMgr;
import org.onap.sdc.dcae.errormng.ResponseFormat;
import org.onap.sdc.dcae.rule.editor.enums.OperatorTypeEnum;
import org.onap.sdc.dcae.rule.editor.utils.ValidationUtils;
-import org.springframework.util.CollectionUtils;
import java.util.List;
@@ -32,10 +32,11 @@ public class ConditionValidator extends BaseConditionValidator<Condition> {
valid = false;
errors.add(ErrConfMgr.INSTANCE.getResponseFormat(ActionStatus.MISSING_OPERAND, null, "left"));
}
- OperatorTypeEnum operatorTypeEnum = OperatorTypeEnum.getTypeByName(condition.getOperator());
+ OperatorTypeEnum operatorTypeEnum = StringUtils.isNotEmpty(condition.getOperator()) ? OperatorTypeEnum.getTypeByName(condition.getOperator()) : null;
if(null == operatorTypeEnum) {
valid = false;
- errors.add(ErrConfMgr.INSTANCE.getResponseFormat(ActionStatus.INVALID_OPERATOR, null, condition.getOperator()));
+ String operatorValue = StringUtils.isNotEmpty(condition.getOperator()) ? condition.getOperator() : "empty";
+ errors.add(ErrConfMgr.INSTANCE.getResponseFormat(ActionStatus.INVALID_OPERATOR, null, operatorValue));
}
if(OperatorTypeEnum.ASSIGNED != operatorTypeEnum && OperatorTypeEnum.UNASSIGNED != operatorTypeEnum && (condition.getRight().isEmpty() || !condition.getRight().stream().allMatch(ValidationUtils::validateNotEmpty))) {
valid = false;
diff --git a/dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/validators/MappingRulesValidator.java b/dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/validators/MappingRulesValidator.java
index 90fda4d..baaff9e 100644
--- a/dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/validators/MappingRulesValidator.java
+++ b/dcaedt_be/src/main/java/org/onap/sdc/dcae/rule/editor/validators/MappingRulesValidator.java
@@ -1,6 +1,5 @@
package org.onap.sdc.dcae.rule.editor.validators;
-import org.onap.sdc.common.onaplog.Enums.LogLevel;
import org.onap.sdc.dcae.composition.restmodels.ruleeditor.MappingRules;
import org.onap.sdc.dcae.composition.restmodels.ruleeditor.Rule;
import org.onap.sdc.dcae.errormng.ActionStatus;
@@ -27,31 +26,23 @@ public class MappingRulesValidator implements IRuleElementValidator<MappingRules
private MappingRulesValidator(){}
public boolean validate(MappingRules rules, List<ResponseFormat> errors) {
- return validateVersionAndType(rules, errors) && validateImportedGroupDefinitions(rules, errors) && rules.getRules().values().stream().map(r -> ruleValidator.validate(r, errors))
- .reduce(true, (x,y) -> x && y);
- // TODO consider using 'allMatch' which will stop on the first error
+ boolean valid = true;
+ if(rules.isEmpty()) {
+ valid = false;
+ errors.add(ErrConfMgr.INSTANCE.getResponseFormat(ActionStatus.INVALID_RULE_FORMAT, "", "no rules found"));
+ }
+ return rules.getRules().values().stream().map(r -> ruleValidator.validate(r, errors))
+ .reduce(true, (x,y) -> x && y) && valid;
+ // TODO consider using 'allMatch' which will stop on the first error
}
- private boolean validateVersionAndType(MappingRules rules, List<ResponseFormat> errors) {
+ public boolean validateVersionAndType(MappingRules rules) {
Map<String, Set<String>> supportedVersions = VesStructureLoader.getAvailableVersionsAndEventTypes();
- boolean valid = ValidationUtils.validateNotEmpty(rules.getVersion()) && supportedVersions.containsKey(rules.getVersion()) && ValidationUtils.validateNotEmpty(rules.getEventType()) && supportedVersions.get(rules.getVersion()).contains(rules.getEventType());
- errLogger.log(LogLevel.INFO, this.getClass().getName(), "validate mapping rules fields: eventType/version {}", valid);
- if(!valid) {
- errors.add(ErrConfMgr.INSTANCE.getResponseFormat(ActionStatus.VES_SCHEMA_NOT_FOUND, null));
- }
- return valid;
+ return ValidationUtils.validateNotEmpty(rules.getVersion()) && supportedVersions.containsKey(rules.getVersion()) && ValidationUtils.validateNotEmpty(rules.getEventType()) && supportedVersions.get(rules.getVersion()).contains(rules.getEventType());
}
- private boolean validateImportedGroupDefinitions(MappingRules rules, List<ResponseFormat> errors) {
- boolean valid = !rules.isEmpty() && (rules.getRules().values().stream().noneMatch(r -> ValidationUtils.validateNotEmpty(r.getGroupId()) || ValidationUtils.validateNotEmpty(r.getPhase())) || validateGroupDefinitions(rules));
- errLogger.log(LogLevel.INFO, this.getClass().getName(), "validate group definitions {}", valid);
- if(!valid) {
- errors.add(ErrConfMgr.INSTANCE.getResponseFormat(ActionStatus.INVALID_RULE_FORMAT, null, "invalid phase definitions"));
- }
- return valid;
- }
- private boolean validateGroupDefinitions(MappingRules rules) {
+ public boolean validateGroupDefinitions(MappingRules rules) {
return rules.getRules().values().stream().allMatch(r -> ValidationUtils.validateNotEmpty(r.getGroupId()) && ValidationUtils.validateNotEmpty(r.getPhase()))
&& rules.getRules().values().stream().collect(Collectors.groupingBy(Rule::getGroupId, Collectors.mapping(Rule::getPhase, Collectors.toSet()))).values().stream().allMatch(p -> 1 == p.size());
}