package husacct.define.domain.appliedrule; import husacct.ServiceProvider; import husacct.common.dto.CategoryDTO; import husacct.define.domain.appliedrule.propertyrules.FacadeConventionRule; import husacct.define.domain.appliedrule.propertyrules.NamingConventionExceptionRule; import husacct.define.domain.appliedrule.propertyrules.NamingConventionRule; import husacct.define.domain.appliedrule.propertyrules.InheritanceConvention; import husacct.define.domain.appliedrule.propertyrules.VisibilityConventionExceptionRule; import husacct.define.domain.appliedrule.propertyrules.VisibilityConventionRule; import husacct.define.domain.appliedrule.relationrules.IsAllowedToUseRule; import husacct.define.domain.appliedrule.relationrules.IsNotAllowedToMakeBackCallRule; import husacct.define.domain.appliedrule.relationrules.IsNotAllowedToMakeSkipCallRule; import husacct.define.domain.appliedrule.relationrules.IsNotAllowedToUseRule; import husacct.define.domain.appliedrule.relationrules.IsOnlyAllowedToUseRule; import husacct.define.domain.appliedrule.relationrules.IsTheOnlyModuleAllowedToUseRule; import husacct.define.domain.appliedrule.relationrules.MustUseRule; import husacct.define.domain.services.ModuleDomainService; import java.util.HashMap; import org.apache.log4j.Logger; public class AppliedRuleFactory { private static Logger logger = Logger.getLogger(AppliedRuleFactory.class); private static final String[] ruleTypes = new String[]{ "IsNotAllowedToUse", "IsNotAllowedToMakeBackCall", "IsNotAllowedToMakeSkipCall", "IsAllowedToUse", "IsOnlyAllowedToUse", "IsTheOnlyModuleAllowedToUse", "MustUse", "NamingConvention", "NamingConventionException", "VisibilityConvention", "VisibilityConventionException", "InheritanceConvention", "FacadeConvention" }; private static final Class<?>[] ruleClasses = new Class[]{ IsNotAllowedToUseRule.class, IsNotAllowedToMakeBackCallRule.class, IsNotAllowedToMakeSkipCallRule.class, IsAllowedToUseRule.class, IsOnlyAllowedToUseRule.class, IsTheOnlyModuleAllowedToUseRule.class, MustUseRule.class, NamingConventionRule.class, NamingConventionExceptionRule.class, VisibilityConventionRule.class, VisibilityConventionExceptionRule.class, InheritanceConvention.class, FacadeConventionRule.class }; public static boolean isRuleTypeExisting(String ruleTypeToBeChecked) { boolean ruleTypeExists = false; for (String ruletype : ruleTypes) { if (ruleTypeToBeChecked.equals(ruletype)) { ruleTypeExists = true; } } return ruleTypeExists; } public CategoryDTO[] getCategories(){ return ServiceProvider.getInstance().getValidateService().getCategories(); } public String[] getRuletypeOptions(){ return ruleTypes; } public AppliedRuleStrategy createRule(String choice){ for(int i = 0; i < ruleTypes.length; i++){ if(ruleTypes[i].equals(choice)) try{ AppliedRuleStrategy newRule = (AppliedRuleStrategy)ruleClasses[i].newInstance(); newRule.setRuleType(choice); return newRule; }catch (InstantiationException ex) { logger.error("Instantiation Error in RuleFactory: " + ex.toString()); } catch (IllegalAccessException ex) { logger.error("Instantiation Error in RuleFactory: " + ex.toString()); } } logger.error("Error in AppliedRuleFactory: Illegal choice: "); throw new IllegalArgumentException("Illegal choice"); } public AppliedRuleStrategy createRuleWithModules(HashMap<String, Object> ruleDetails){ ModuleDomainService mds = new ModuleDomainService(); for(int i = 0; i < ruleTypes.length; i++){ if(ruleTypes[i].equals(ruleDetails.get("ruleTypeKey"))) try{ AppliedRuleStrategy newRule = (AppliedRuleStrategy)ruleClasses[i].newInstance(); newRule.setRuleType(""+ruleDetails.get("ruleTypeKey")); newRule.setId(-1); newRule.setModuleFrom(mds.getModuleById((long) ruleDetails.get("moduleFromId"))); if(ruleDetails.get("moduleToId").toString().endsWith("PACKAGE") || ruleDetails.get("moduleToId").toString().endsWith("CLASS") || ruleDetails.get("moduleToId").toString().endsWith("INTERFACE") || ruleDetails.get("moduleToId").toString().endsWith("LIBRARY") || ruleDetails.get("moduleToId").toString().endsWith("EXTERNALLIBRARY") || ruleDetails.get("moduleToId").toString().endsWith("REGEX") || ruleDetails.get("moduleToId").toString().endsWith("SUBSYSTEM")) newRule.setModuleTo(mds.getModuleById((long) ruleDetails.get("moduleFromId"))); else if(Integer.parseInt(""+ruleDetails.get("moduleToId")) != -1) newRule.setModuleTo(mds.getModuleById((long) ruleDetails.get("moduleToId"))); else newRule.setModuleTo(mds.getModuleById((long) ruleDetails.get("moduleFromId"))); return newRule; }catch (InstantiationException ex) { logger.error("Instantiation Error in RuleFactory: " + ex.toString()); } catch (IllegalAccessException ex) { logger.error("Instantiation Error in RuleFactory: " + ex.toString()); } } logger.error("Error in AppliedRuleFactory: Illegal choice: "); throw new IllegalArgumentException("Illegal choice"); } }