package husacct.define.domain.module; import husacct.define.domain.module.modules.Blank; import husacct.define.domain.module.modules.Component; import husacct.define.domain.module.modules.ExternalLibrary; import husacct.define.domain.module.modules.Facade; import husacct.define.domain.module.modules.Layer; import husacct.define.domain.module.modules.Root; import husacct.define.domain.module.modules.SubSystem; import org.apache.log4j.Logger; public class ModuleFactory { private static Logger logger = Logger.getLogger(ModuleFactory.class); public static String[] moduleTypes = new String[]{ "Layer", "Component", "Facade", "SubSystem", "ExternalLibrary", "Root", "Blank" }; public static Class<?>[] moduleTypeClasses = new Class[]{ Layer.class, Component.class, Facade.class, SubSystem.class, ExternalLibrary.class, Root.class, Blank.class }; public ModuleStrategy createModule(String moduleType){ for(int i = 0; i < moduleTypes.length; i++){ if(moduleTypes[i].equalsIgnoreCase(moduleType)) try{ ModuleStrategy newModule = (ModuleStrategy)moduleTypeClasses[i].newInstance(); newModule.setType(moduleType); return newModule; }catch (InstantiationException ex) { logger.error("Instantiation Error in ModuleFactory: " + ex.toString()); } catch (IllegalAccessException ex) { logger.error("Instantiation Error in ModuleFactory: " + ex.toString()); } } logger.error("Error in ModuleFactory: Illegal choice: "); throw new IllegalArgumentException("Illegal choice"); } public ModuleStrategy createDummy(String choice){ for(int i = 0; i < moduleTypes.length; i++){ if(moduleTypes[i].equalsIgnoreCase(choice)) try{ ModuleStrategy dummyModule = (ModuleStrategy)moduleTypeClasses[i].newInstance(); dummyModule.setType(choice); dummyModule.setId(-1); dummyModule.setName(""); dummyModule.setDescription(""); return dummyModule; }catch (InstantiationException ex) { logger.error("Instantiation Error in ModuleFactory: " + ex.toString()); } catch (IllegalAccessException ex) { logger.error("Instantiation Error in ModuleFactory: " + ex.toString()); } } logger.error("Error in ModuleFactory: Illegal choice: "); throw new IllegalArgumentException("Illegal choice"); } public ModuleStrategy updateModuleType(ModuleStrategy oldModule, String moduleType){ ModuleStrategy newModule = createModule(moduleType); oldModule.copyValuestoNewModule(newModule); // In case of an oldModule of type Component, it also removes the facade. if (moduleType.toLowerCase().equals("component")) { ModuleStrategy facade = this.createModule("Facade"); facade.set(newModule.getName()+"Facade", "This is the Facade of "+newModule.getName()); newModule.addSubModule(0, facade); } return newModule; } }