package com.c2kernel.process; import java.net.URL; import java.util.ArrayList; import java.util.Enumeration; import java.util.Properties; import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.entity.proxy.ItemProxy; import com.c2kernel.lookup.DomainPath; import com.c2kernel.utils.FileStringUtility; import com.c2kernel.utils.Logger; public class ModuleManager { ArrayList modules = new ArrayList(); Properties props = new Properties(); boolean isServer; public ModuleManager(Enumeration moduleEnum, boolean isServer) { this.isServer = isServer; ArrayList loadedModules = new ArrayList(); while(moduleEnum.hasMoreElements()) { URL newModuleURL = moduleEnum.nextElement(); try { Module newModule = new Module(FileStringUtility.url2String(newModuleURL)); modules.add(newModule); loadedModules.add(newModule.getName()); Properties modProp = isServer?newModule.getServerProperties():newModule.getClientProperties(); for (Enumeration e = modProp.propertyNames(); e.hasMoreElements();) { String propName = (String)e.nextElement(); props.put(propName, modProp.get(propName)); } } catch (Exception e) { Logger.error("Could not load module description from "+newModuleURL); Logger.error(e); } } Logger.debug(5, "Checking dependencies"); boolean depFailed = false; for (Module thisMod : modules) { ArrayList deps = thisMod.getDependencies(); for (String dep : deps) { if (!loadedModules.contains(dep)) { Logger.error("UNMET MODULE DEPENDENCY: "+thisMod.getName()+" requires "+dep); depFailed = true; } } } if (depFailed) Logger.die("Unmet module dependencies. Cannot continue"); } public String getModuleVersions() { StringBuffer ver = new StringBuffer(); for (Module thisMod : modules) { if (ver.length()>0) ver.append(";"); ver.append(thisMod.getName()+"("+thisMod.getVersion()+")"); } return ver.toString(); } public Properties getAllModuleProperties() { return props; } public void runScripts(String event) { for (Module thisMod : modules) { thisMod.runScript(event, isServer); } } public void registerModules() throws ObjectNotFoundException { ItemProxy serverEntity = (ItemProxy)Gateway.getProxyManager().getProxy(new DomainPath("/servers/"+Gateway.getProperty("ItemServer.name"))); Logger.debug(3, "Registering modules"); for (Module thisMod : modules) { Logger.debug(4, "Registering module "+thisMod.getName()); thisMod.importAll(serverEntity); Logger.msg("Module "+thisMod.getName()+" registered"); } } }