package husacct.define.domain.conventions_checker;
import husacct.ServiceProvider;
import husacct.define.domain.appliedrule.AppliedRuleStrategy;
import husacct.define.domain.module.ModuleStrategy;
import husacct.define.domain.services.AppliedRuleDomainService;
import java.util.ArrayList;
public class ModuleCheckerHelper {
private AppliedRuleDomainService appliedRuleService;
private String errorMessage;
public ModuleCheckerHelper() {
setErrorMessage("");
appliedRuleService = new AppliedRuleDomainService();
}
public boolean rootIsNotIncludedInRule(ModuleStrategy fromModule, ModuleStrategy toModule){
if(fromModule.getType().equals("Root") || toModule.getType().equals("Root"))
return false;
else
return true;
}
public boolean checkRuleTypeAlreadyFromOtherToSelected(String ruleType, ModuleStrategy fromModule, ModuleStrategy toModule) {
for (AppliedRuleStrategy appliedRule : getToModuleAppliedRules(toModule)) {
if (appliedRule.getRuleTypeKey().equals(ruleType)
&& checkRuleTypeAlreadyFromOtherToSelectedFromModuleId(appliedRule.getModuleFrom(), fromModule)
&& appliedRule.getModuleTo().getId() == toModule.getId()
&& !appliedRule.isEnabled()) {
setErrorMessage("'" + appliedRule.getModuleFrom().getName() + "' "
+ ServiceProvider.getInstance().getLocaleService().getTranslatedString(ruleType) + " '"
+ appliedRule.getModuleTo().getName() + "'");
return false;
}
}
for (ModuleStrategy toModuleChild : toModule.getSubModules()) {
if (!checkRuleTypeAlreadyFromOtherToSelected(ruleType, fromModule, toModuleChild)) {
return false;
}
}
return true;
}
private boolean checkRuleTypeAlreadyFromOtherToSelectedFromModuleId(ModuleStrategy appliedRuleModule, ModuleStrategy fromModule) {
if (appliedRuleModule.getId() == fromModule.getId()) {
return false;
} else {
for (ModuleStrategy fromModuleChild : fromModule.getSubModules()) {
if (!checkRuleTypeAlreadyFromOtherToSelectedFromModuleId(
appliedRuleModule, fromModuleChild)) {
return false;
}
}
}
return true;
}
public boolean checkRuleTypeAlreadyFromThisToOther(String ruleType,
ModuleStrategy fromModule, ModuleStrategy toModule) {
for (AppliedRuleStrategy appliedRule : getFromModuleAppliedRules(fromModule)) {
if (appliedRule.getRuleTypeKey().equals(ruleType)
&& appliedRule.getModuleFrom().getId() == fromModule
.getId()
&& appliedRule.getModuleTo().getId() != toModule.getId() && !appliedRule.isEnabled()) {
setErrorMessage("'"
+ appliedRule.getModuleFrom().getName()
+ "' "
+ ServiceProvider.getInstance().getLocaleService()
.getTranslatedString(ruleType) + " '"
+ appliedRule.getModuleTo().getName() + "'");
return false;
}
}
for (ModuleStrategy fromModuleChild : fromModule.getSubModules()) {
if (!checkRuleTypeAlreadyFromThisToOther(ruleType, fromModuleChild,
toModule)) {
return false;
}
}
for (ModuleStrategy toModuleChild : toModule.getSubModules()) {
if (!checkRuleTypeAlreadyFromThisToOther(ruleType, fromModule,
toModuleChild)) {
return false;
}
}
return true;
}
public boolean checkRuleTypeAlreadyFromThisToSelected(String ruleType,
ModuleStrategy fromModule, ModuleStrategy toModule) {
for (AppliedRuleStrategy appliedRule : getFromModuleAppliedRules(fromModule)) {
if (appliedRule.getRuleTypeKey().equals(ruleType)
&& appliedRule.getModuleFrom().getId() == fromModule
.getId()
&& appliedRule.getModuleTo().getId() == toModule.getId() && appliedRule.isEnabled()) {
setErrorMessage("'"
+ appliedRule.getModuleFrom().getName()
+ "' "
+ ServiceProvider.getInstance().getLocaleService()
.getTranslatedString(ruleType) + " '"
+ appliedRule.getModuleTo().getName() + "'");
return false;
}
}
for (ModuleStrategy fromModuleChild : fromModule.getSubModules()) {
if (!checkRuleTypeAlreadyFromThisToSelected(ruleType,
fromModuleChild, toModule)) {
return false;
}
}
for (ModuleStrategy toModuleChild : toModule.getSubModules()) {
if (!checkRuleTypeAlreadyFromThisToSelected(ruleType, fromModule,
toModuleChild)) {
return false;
}
}
return true;
}
public boolean checkRuleTypeAlreadySet(String ruleTypeKey, ModuleStrategy moduleFrom) {
for (AppliedRuleStrategy appliedRule : getFromModuleAppliedRules(moduleFrom)) {
if (appliedRule.getRuleTypeKey().equals(ruleTypeKey)) {
setErrorMessage("'"
+ ServiceProvider.getInstance().getLocaleService()
.getTranslatedString(ruleTypeKey) + "'");
return false;
}
}
return true;
}
public String getErrorMessage() {
return errorMessage;
}
private ArrayList<AppliedRuleStrategy> getFromModuleAppliedRules(ModuleStrategy fromModule) {
ArrayList<Long> appliedRuleIds = new ArrayList<Long>();
appliedRuleIds= appliedRuleService.getAppliedRulesIdsByModuleFromId(fromModule.getId());
ArrayList<AppliedRuleStrategy> appliedRules = new ArrayList<AppliedRuleStrategy>();
for (long appliedRuleId : appliedRuleIds) {
appliedRules.add(appliedRuleService.getAppliedRuleById(appliedRuleId));
}
return appliedRules;
}
private ArrayList<AppliedRuleStrategy> getToModuleAppliedRules(ModuleStrategy toModule) {
ArrayList<Long> appliedRuleIds = appliedRuleService.getAppliedRulesIdsByModuleToId(toModule.getId());
ArrayList<AppliedRuleStrategy> appliedRules = new ArrayList<AppliedRuleStrategy>();
for (long appliedRuleId : appliedRuleIds) {
appliedRules.add(appliedRuleService.getAppliedRuleById(appliedRuleId));
}
return appliedRules;
}
public void setErrorMessage(String message) {
if (!message.equals("")) {
errorMessage = ServiceProvider.getInstance().getLocaleService()
.getTranslatedString("NotAllowedBecauseDefined") + ":\n\n " + message;
} else {
errorMessage = "";
}
}
}