private ActiveRuleDto persist( ActiveRuleChange change, RuleActivatorContext context, DbSession dbSession) { ActiveRuleDao dao = db.activeRuleDao(); ActiveRuleDto activeRule = null; if (change.getType() == ActiveRuleChange.Type.ACTIVATED) { activeRule = ActiveRuleDto.createFor(context.profile(), context.rule()); activeRule.setSeverity(change.getSeverity()); if (change.getInheritance() != null) { activeRule.setInheritance(change.getInheritance().name()); } dao.insert(dbSession, activeRule); for (Map.Entry<String, String> param : change.getParameters().entrySet()) { if (param.getValue() != null) { ActiveRuleParamDto paramDto = ActiveRuleParamDto.createFor(context.ruleParamsByKeys().get(param.getKey())); paramDto.setValue(param.getValue()); dao.addParam(dbSession, activeRule, paramDto); } } } else if (change.getType() == ActiveRuleChange.Type.DEACTIVATED) { dao.deleteByKey(dbSession, change.getKey()); } else if (change.getType() == ActiveRuleChange.Type.UPDATED) { activeRule = context.activeRule(); activeRule.setSeverity(change.getSeverity()); if (change.getInheritance() != null) { activeRule.setInheritance(change.getInheritance().name()); } dao.update(dbSession, activeRule); for (Map.Entry<String, String> param : change.getParameters().entrySet()) { ActiveRuleParamDto activeRuleParamDto = context.activeRuleParamsAsMap().get(param.getKey()); if (activeRuleParamDto == null) { // did not exist if (param.getValue() != null) { activeRuleParamDto = ActiveRuleParamDto.createFor(context.ruleParamsByKeys().get(param.getKey())); activeRuleParamDto.setValue(param.getValue()); dao.addParam(dbSession, activeRule, activeRuleParamDto); } } else { if (param.getValue() != null) { activeRuleParamDto.setValue(param.getValue()); dao.updateParam(dbSession, activeRule, activeRuleParamDto); } else { dao.deleteParam(dbSession, activeRule, activeRuleParamDto); } } } } return activeRule; }
/** True if trying to override an inherited rule but with exactly the same values */ boolean isSameAsParent(ActiveRuleChange change) { if (parentActiveRule == null) { return false; } if (!StringUtils.equals(change.getSeverity(), parentActiveRule.getSeverityString())) { return false; } for (Map.Entry<String, String> entry : change.getParameters().entrySet()) { if (entry.getValue() != null && !entry.getValue().equals(parentParamValue(entry.getKey()))) { return false; } } return true; }
boolean isSame(ActiveRuleChange change) { ActiveRule.Inheritance inheritance = change.getInheritance(); if (inheritance != null && !inheritance.name().equals(activeRule.getInheritance())) { return false; } String severity = change.getSeverity(); if (severity != null && !severity.equals(activeRule.getSeverityString())) { return false; } for (Map.Entry<String, String> changeParam : change.getParameters().entrySet()) { ActiveRuleParamDto param = activeRuleParams.get(changeParam.getKey()); if (param != null && !StringUtils.equals(changeParam.getValue(), param.getValue())) { return false; } } return true; }