package husacct.validate.domain.validation.moduletype; import java.util.HashMap; import java.util.List; import husacct.common.enums.ModuleTypes; import husacct.validate.domain.exception.ModuleNotFoundException; import husacct.validate.domain.validation.ruletype.RuleType; public class ModuleFactory { private HashMap<String, AbstractModule> moduleTypesMap = new HashMap<String, AbstractModule>(); public ModuleFactory(List<RuleType> rules) { for (ModuleTypes moduleType : ModuleTypes.values()) { moduleTypesMap.put(moduleType.name().toLowerCase().replace("_", ""), createModule(moduleType.toString().toLowerCase().replace("_", ""), rules)); } } private AbstractModule createModule(String moduleType, List<RuleType> rules) { switch (moduleType.toLowerCase()) { case "component": return new Component(rules); case "externallibrary": return new ExternalLibrary(rules); case "layer": return new Layer(rules); case "subsystem": return new SubSystem(rules); case "facade": return new Facade(rules); default: throw new ModuleNotFoundException(moduleType); } } public List<RuleType> getAllowedRuleTypesOfModule(String moduleType) throws ModuleNotFoundException { if (moduleType.toLowerCase().equals("root")) moduleType = "subsystem"; moduleType = moduleType.toLowerCase().replace("_", ""); AbstractModule module = moduleTypesMap.get(moduleType); return module.getAllowedRuleTypes(); } public List<RuleType> getDefaultRuleTypesOfModule(String moduleType) throws ModuleNotFoundException { if (moduleType.toLowerCase().equals("root")) moduleType = "subsystem"; AbstractModule module = moduleTypesMap.get(moduleType.toLowerCase().replace("_", "")); return module.getDefaultRuleTypes(); } public void setAllowedRuleTypeOfModule(String moduleType, String ruleTypeKey, boolean value) throws ModuleNotFoundException { AbstractModule module = moduleTypesMap.get(moduleType.toLowerCase().replace("_", "")); module.setAllowedRuleType(ruleTypeKey, value); } public void setDefaultRuleTypeOfModule(String moduleType, String ruleTypeKey, boolean value) throws ModuleNotFoundException { AbstractModule module = moduleTypesMap.get(moduleType.toLowerCase().replace("_", "")); module.setDefaultRuleType(ruleTypeKey, value); } }