package com.c2kernel.process.module; import java.util.ArrayList; import java.util.Properties; import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.entity.imports.ImportDependency; import com.c2kernel.entity.imports.ImportDependencyMember; import com.c2kernel.entity.imports.ImportAgent; import com.c2kernel.entity.imports.ImportItem; import com.c2kernel.entity.imports.ImportRole; import com.c2kernel.entity.imports.ImportOutcome; import com.c2kernel.entity.proxy.AgentProxy; import com.c2kernel.entity.proxy.ItemProxy; import com.c2kernel.lookup.DomainPath; import com.c2kernel.lookup.RolePath; import com.c2kernel.process.Bootstrap; import com.c2kernel.process.Gateway; import com.c2kernel.scripting.ErrorInfo; import com.c2kernel.scripting.ScriptingEngineException; import com.c2kernel.utils.Logger; public class Module { public String ns, name; public ModuleInfo info; public String resURL; public ModuleImports imports = new ModuleImports(); public ArrayList config = new ArrayList(); public ArrayList scripts = new ArrayList(); public ImportItem moduleItem; public Module() { super(); } public void runScript(String event, AgentProxy user, boolean isServer) throws ScriptingEngineException { for (ModuleScript script : scripts) { if (script.shouldRun(event, isServer)) { Logger.msg("Running "+script.event+" "+script.target+" script from "+name); Object result = script.getScript(ns, user).execute(); if (result instanceof ErrorInfo) { ErrorInfo error = (ErrorInfo) result; Logger.error(error.toString()); if (error.getFatal()) throw new ScriptingEngineException("Fatal Script Error"); } else if (result != null) Logger.msg(result.toString()); } } } public void addModuleItem(String moduleXML) { ImportItem moduleItem = new ImportItem(name, "/desc/modules/", "NoWorkflow", 0); // Module properties moduleItem.properties.add(new com.c2kernel.property.Property("Namespace", ns, false)); moduleItem.properties.add(new com.c2kernel.property.Property("Name", name, false)); moduleItem.properties.add(new com.c2kernel.property.Property("Type", "Module", false)); moduleItem.properties.add(new com.c2kernel.property.Property("Layer", String.valueOf(info.layer), true)); moduleItem.properties.add(new com.c2kernel.property.Property("Version", info.version, true)); // Add dependency for all children ImportDependency children = new ImportDependency("Contents"); for (ModuleImport thisImport : imports.list) { DomainPath path = thisImport.path; if (path != null) children.dependencyMemberList.add(new ImportDependencyMember(path.toString())); } moduleItem.dependencyList.add(children); // Add moduleXML ImportOutcome moduleOutcome = new ImportOutcome("Module", 0, "last", null); moduleOutcome.data = moduleXML; moduleItem.outcomes.add(moduleOutcome); imports.list.add(moduleItem); } public void importAll(ItemProxy serverEntity, AgentProxy systemAgent, String moduleXML, boolean reset) throws Exception { int systemAgentId = systemAgent.getSystemKey(); addModuleItem(moduleXML); for (ModuleResource thisRes : imports.getResources()) { try { thisRes.path = Bootstrap.verifyResource(ns, thisRes.name, thisRes.version, thisRes.resourceType, thisRes.resourceLocation, info.layer, reset); } catch (Exception ex) { Logger.error(ex); Logger.die("Error importing module resources. Unsafe to continue."); } } for (ImportRole thisRole : imports.getRoles()) { RolePath rolePath; try { rolePath = Gateway.getLookup().getRolePath(thisRole.name); if (rolePath.hasJobList() != thisRole.jobList) { Logger.msg("Module.importAll() - Role '"+thisRole.name+"' has incorrect joblist settings. Correcting."); rolePath.setHasJobList(thisRole.jobList); } } catch (ObjectNotFoundException ex) { Logger.msg("Module.importAll() - Role '"+thisRole.name+"' not found. Creating."); thisRole.create(systemAgentId); } } for (ImportAgent thisAgent : imports.getAgents()) { try { Gateway.getLookup().getAgentPath(thisAgent.name); Logger.msg(3, "Module.importAll() - User '"+thisAgent.name+"' found."); continue; } catch (ObjectNotFoundException ex) { } Logger.msg("Module.importAll() - User '"+thisAgent.name+"' not found. Creating."); thisAgent.create(systemAgentId); } for (ImportItem thisItem : imports.getItems()) { thisItem.setNamespace(ns); thisItem.create(systemAgentId, reset); } } public Properties getProperties(boolean isServer) { Properties props = new Properties(); for (ModuleConfig thisProp : config) { if (thisProp.include(isServer)) props.put(thisProp.name, thisProp.value); } return props; } public String getNs() { return ns; } public String getName() { return name; } public String getDesc() { return info.desc; } public String getVersion() { return info.version; } public String getResURL() { return resURL; } public ArrayList getDependencies() { return info.dependency; } public boolean hasDependency(String dep) { return info.dependency.contains(dep); } }