From 24314dc1699c7e73048fa24e33729f1aa1ec0e86 Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Fri, 6 Jul 2012 11:00:24 +0200 Subject: Modules serialize with Castor. Just about to remove the parsing. CastorXMLUtility is now a static member of gateway. Domain specific instances can be used by domain applications, but the maps do not interfere with the kernel. --- src/main/java/com/c2kernel/process/Bootstrap.java | 7 +- src/main/java/com/c2kernel/process/Gateway.java | 29 ++- .../java/com/c2kernel/process/ItemHTTPBridge.java | 3 +- .../java/com/c2kernel/process/module/Module.java | 255 ++++++--------------- .../com/c2kernel/process/module/ModuleAgent.java | 9 - .../com/c2kernel/process/module/ModuleConfig.java | 22 ++ .../com/c2kernel/process/module/ModuleImport.java | 10 +- .../com/c2kernel/process/module/ModuleImports.java | 18 ++ .../com/c2kernel/process/module/ModuleInfo.java | 14 ++ .../com/c2kernel/process/module/ModuleItem.java | 17 -- .../com/c2kernel/process/module/ModuleManager.java | 34 ++- .../c2kernel/process/module/ModuleResource.java | 19 +- .../com/c2kernel/process/module/ModuleScript.java | 33 +++ 13 files changed, 235 insertions(+), 235 deletions(-) delete mode 100644 src/main/java/com/c2kernel/process/module/ModuleAgent.java create mode 100644 src/main/java/com/c2kernel/process/module/ModuleConfig.java create mode 100644 src/main/java/com/c2kernel/process/module/ModuleImports.java create mode 100644 src/main/java/com/c2kernel/process/module/ModuleInfo.java delete mode 100644 src/main/java/com/c2kernel/process/module/ModuleItem.java create mode 100644 src/main/java/com/c2kernel/process/module/ModuleScript.java (limited to 'src/main/java/com/c2kernel/process') diff --git a/src/main/java/com/c2kernel/process/Bootstrap.java b/src/main/java/com/c2kernel/process/Bootstrap.java index 39a13d2..507be7e 100644 --- a/src/main/java/com/c2kernel/process/Bootstrap.java +++ b/src/main/java/com/c2kernel/process/Bootstrap.java @@ -29,7 +29,6 @@ import com.c2kernel.property.Property; import com.c2kernel.property.PropertyArrayList; import com.c2kernel.property.PropertyDescription; import com.c2kernel.property.PropertyDescriptionList; -import com.c2kernel.utils.CastorXMLUtility; import com.c2kernel.utils.FileStringUtility; import com.c2kernel.utils.LocalObjectLoader; import com.c2kernel.utils.Logger; @@ -153,7 +152,7 @@ public class Bootstrap */ private static ItemProxy createResourceItem(String itemType, String itemName, String ns) throws Exception { // create props - PropertyDescriptionList pdList = (PropertyDescriptionList)CastorXMLUtility.unmarshall(Resource.getTextResource(null, "boot/property/"+itemType+"Prop.xml")); + PropertyDescriptionList pdList = (PropertyDescriptionList)Gateway.getMarshaller().unmarshall(Resource.getTextResource(null, "boot/property/"+itemType+"Prop.xml")); PropertyArrayList props = new PropertyArrayList(); for (int i = 0; i < pdList.list.size(); i++) { PropertyDescription pd = pdList.list.get(i); @@ -179,8 +178,8 @@ public class Bootstrap Gateway.getLDAPLookup().add(entityPath); newItem.initialise( 1, - CastorXMLUtility.marshall(props), - CastorXMLUtility.marshall(ca)); + Gateway.getMarshaller().marshall(props), + Gateway.getMarshaller().marshall(ca)); DomainPath newDomPath = new DomainPath(getTypeRoot(itemType).toString()+"/system/"+(ns==null?"kernel":ns)+"/"+itemName); newDomPath.setEntity(entityPath); Gateway.getLDAPLookup().add(newDomPath); diff --git a/src/main/java/com/c2kernel/process/Gateway.java b/src/main/java/com/c2kernel/process/Gateway.java index e0decc4..4cba4ba 100644 --- a/src/main/java/com/c2kernel/process/Gateway.java +++ b/src/main/java/com/c2kernel/process/Gateway.java @@ -58,6 +58,7 @@ public class Gateway static private EntityProxyManager mProxyManager; static private CorbaServer mCorbaServer; static private SimpleTCPIPServer mHTTPServer; + static private CastorXMLUtility mMarshaller; @@ -73,15 +74,18 @@ public class Gateway */ static public void init(Properties props, boolean isServer) throws InvalidDataException { - // if supplied props are null, use system props - if (props == null) props = System.getProperties(); - // Init properties mC2KProps = new Properties(); - mC2KProps.putAll(props); // report version info Logger.msg("Kernel version: "+Resource.getKernelVersion()); + + // load kernel mapfiles + try { + mMarshaller = new CastorXMLUtility(Resource.getKernelResourceURL("mapFiles/")); + } catch (MalformedURLException e1) { + throw new InvalidDataException("Invalid Resource Location", ""); + } // init module manager try { @@ -99,21 +103,11 @@ public class Gateway } // Overwrite with argument props - for (Enumeration e = props.propertyNames(); e.hasMoreElements();) { - String propName = (String)e.nextElement(); - mC2KProps.put(propName, props.get(propName)); - } + if (props != null) mC2KProps.putAll(props); // dump properties dumpC2KProps(7); - // load kernel mapfiles - try { - CastorXMLUtility.loadMapsFrom(Resource.getKernelResourceURL("mapFiles/")); - } catch (MalformedURLException e1) { - throw new InvalidDataException("Invalid Resource Location", ""); - } - //Initialise language file String languageFile = getProperty("language.file"); if (languageFile != null && languageFile.length() > 0) { @@ -383,6 +377,11 @@ public class Gateway { return mStorage; } + + static public CastorXMLUtility getMarshaller() + { + return mMarshaller; + } static public EntityProxyManager getProxyManager() { diff --git a/src/main/java/com/c2kernel/process/ItemHTTPBridge.java b/src/main/java/com/c2kernel/process/ItemHTTPBridge.java index 40f48f7..6ad8e01 100644 --- a/src/main/java/com/c2kernel/process/ItemHTTPBridge.java +++ b/src/main/java/com/c2kernel/process/ItemHTTPBridge.java @@ -3,7 +3,6 @@ package com.c2kernel.process; import java.util.StringTokenizer; import com.c2kernel.entity.C2KLocalObject; -import com.c2kernel.utils.CastorXMLUtility; import com.c2kernel.utils.server.HTTPRequestHandler; /* QueryData over HTTP Socket Handler @@ -37,7 +36,7 @@ public class ItemHTTPBridge extends HTTPRequestHandler { if (sysKey > -1) { C2KLocalObject response = Gateway.getStorage().get(sysKey, query, null); - return CastorXMLUtility.marshall(response); + return Gateway.getMarshaller().marshall(response); } else return error("404 Not Found", "The entity "+sysKey+" you requested was not found."); diff --git a/src/main/java/com/c2kernel/process/module/Module.java b/src/main/java/com/c2kernel/process/module/Module.java index d015aea..22f4543 100644 --- a/src/main/java/com/c2kernel/process/module/Module.java +++ b/src/main/java/com/c2kernel/process/module/Module.java @@ -1,8 +1,8 @@ package com.c2kernel.process.module; import java.io.StringReader; +import java.security.NoSuchAlgorithmException; import java.util.ArrayList; -import java.util.HashMap; import java.util.Properties; import javax.xml.parsers.DocumentBuilder; @@ -14,44 +14,31 @@ import org.w3c.dom.NodeList; import org.w3c.dom.Text; import org.xml.sax.InputSource; +import com.c2kernel.common.CannotManageException; +import com.c2kernel.common.ObjectAlreadyExistsException; +import com.c2kernel.common.ObjectCannotBeUpdated; import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.entity.proxy.ItemProxy; -import com.c2kernel.events.Event; -import com.c2kernel.events.History; -import com.c2kernel.lifecycle.instance.predefined.entitycreation.Aggregation; -import com.c2kernel.lifecycle.instance.predefined.entitycreation.AggregationMember; -import com.c2kernel.lifecycle.instance.predefined.entitycreation.Dependency; -import com.c2kernel.lifecycle.instance.predefined.entitycreation.DependencyMember; -import com.c2kernel.lifecycle.instance.predefined.entitycreation.Geometry; import com.c2kernel.lifecycle.instance.predefined.entitycreation.NewAgent; import com.c2kernel.lifecycle.instance.predefined.entitycreation.NewItem; -import com.c2kernel.lifecycle.instance.predefined.entitycreation.Property; -import com.c2kernel.lifecycle.instance.stateMachine.States; -import com.c2kernel.lifecycle.instance.stateMachine.Transitions; import com.c2kernel.lookup.DomainPath; -import com.c2kernel.persistency.outcome.Outcome; -import com.c2kernel.persistency.outcome.Viewpoint; import com.c2kernel.process.Bootstrap; import com.c2kernel.process.Gateway; import com.c2kernel.scripting.ErrorInfo; -import com.c2kernel.scripting.Script; import com.c2kernel.scripting.ScriptingEngineException; -import com.c2kernel.utils.CastorXMLUtility; import com.c2kernel.utils.Logger; import com.c2kernel.utils.Resource; public class Module { - private final String ns, name, desc, version; - private String resURL; - private final ArrayList dependency = new ArrayList(); - private final Properties clientProps = new Properties(); - private final Properties serverProps = new Properties(); - private final HashMap clientScripts = new HashMap(); - private final HashMap serverScripts = new HashMap(); - private final ArrayList imports = new ArrayList(); + 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(); private static DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - private final DocumentBuilder parser; + private DocumentBuilder parser; private Document moduleDOM; static { @@ -59,6 +46,10 @@ public class Module { dbf.setNamespaceAware(false); } + public Module() { + super(); + } + public Module(String moduleXML) throws ModuleException { try { parser = dbf.newDocumentBuilder(); @@ -74,12 +65,13 @@ public class Module { ns = root.getAttribute("ns"); name = root.getAttribute("name"); - Element info = (Element)moduleDOM.getElementsByTagName("Info").item(0); - desc = ((Text)info.getElementsByTagName("Description").item(0).getFirstChild()).getData(); - version = ((Text)info.getElementsByTagName("Version").item(0).getFirstChild()).getData(); - NodeList nl = info.getElementsByTagName("Dependency"); + Element infoElem = (Element)moduleDOM.getElementsByTagName("Info").item(0); + info = new ModuleInfo(); + info.desc = ((Text)infoElem.getElementsByTagName("Description").item(0).getFirstChild()).getData(); + info.version = ((Text)infoElem.getElementsByTagName("Version").item(0).getFirstChild()).getData(); + NodeList nl = infoElem.getElementsByTagName("Dependency"); for (int i=0; i scripts = isServer?serverScripts:clientScripts; - Script thisScript = scripts.get(event); - if (thisScript == null) return null; - try { - Object result = thisScript.execute(); - if (result instanceof ErrorInfo) - return (ErrorInfo)result; - else - return new ErrorInfo(result.toString()); - } catch (ScriptingEngineException ex) { - Logger.error(ex); - return new ErrorInfo("Error running "+event+" script in module "+ns); + public static com.c2kernel.property.Property newProperty(Element p) { + return new com.c2kernel.property.Property(p.getAttribute("name"), ((Text)p.getFirstChild()).getData()); + } + + public void runScript(String event, boolean isServer) throws ScriptingEngineException { + for (ModuleScript script : scripts) { + if (script.shouldRun(event, isServer)) { + Object result = script.getScript().execute(); + if (result instanceof ErrorInfo) { + ErrorInfo error = (ErrorInfo) result; + Logger.error(error.getErrors()); + if (error.getFatal()) + throw new ScriptingEngineException("Fatal Script Error"); + } + else if (result != null) + Logger.msg(result.toString()); + } } } - public void importAll(ItemProxy serverEntity) { - for (ModuleImport thisImp : imports) { - Logger.msg(5, "Importing "+thisImp.importName+" "+thisImp.getClass().getSimpleName()); + public void importAll(ItemProxy serverEntity) throws ObjectCannotBeUpdated, ObjectNotFoundException, CannotManageException, ObjectAlreadyExistsException, NoSuchAlgorithmException { + for (ModuleImport thisImp : imports.list) { + Logger.msg(5, "Importing "+thisImp.name+" "+thisImp.getClass().getSimpleName()); if (thisImp instanceof ModuleResource) { ModuleResource thisRes = (ModuleResource)thisImp; try { - Bootstrap.verifyResource(ns, thisRes.importName, thisRes.resourceType, Resource.getTextResource(ns, thisRes.resourceLocation)); + Bootstrap.verifyResource(ns, thisRes.name, thisRes.resourceType, Resource.getTextResource(ns, thisRes.resourceLocation)); } catch (Exception ex) { Logger.error(ex); } } - else if (thisImp instanceof ModuleItem) { - ModuleItem thisItem = (ModuleItem)thisImp; + else if (thisImp instanceof NewItem) { + NewItem thisItem = (NewItem)thisImp; + thisItem.ns=ns; try { - NewItem item = new NewItem(thisItem.importName, thisItem.initialPath, thisItem.workflow); - item.propertyList = thisItem.props; - DomainPath itemPath = new DomainPath(new DomainPath(item.initialPath), item.name); - if (itemPath.exists()) continue; - serverEntity.requestAction( - Gateway.getLDAPLookup().getRoleManager().getAgentPath("system").getSysKey(), - "workflow/predefined/CreateNewItem", - Transitions.DONE, - CastorXMLUtility.marshall(item)); - Logger.msg("Module.importAll() - Created item: "+thisItem.importName); - ItemProxy newProxy = (ItemProxy)Gateway.getProxyManager().getProxy(itemPath); - History hist = new History(newProxy.getSystemKey(), newProxy); - for (String thisView : thisItem.outcomes.keySet()) { - String[] info = thisView.split(":"); - int version = Integer.parseInt(info[1]); - String data = Resource.getTextResource(ns, thisItem.outcomes.get(thisView)); - Event newEvent = hist.addEvent("system", "Admin", Transitions.DONE, "Import", "Import", "Import", States.FINISHED); - Outcome newOutcome = new Outcome(newEvent.getID(), data, info[0], version); - Viewpoint newLastView = new Viewpoint(newProxy.getSystemKey(), info[0], info[2], version, newEvent.getID()); - Gateway.getStorage().put(newProxy.getSystemKey(), newOutcome, newProxy); - Gateway.getStorage().put(newProxy.getSystemKey(), newLastView, newProxy); - } - for (Dependency thisDep : thisItem.deps) { - Gateway.getStorage().put(newProxy.getSystemKey(), thisDep.create(), newProxy); - } - for (Aggregation thisAgg : thisItem.aggs) { - Gateway.getStorage().put(newProxy.getSystemKey(), thisAgg.create(), newProxy); - } - Gateway.getStorage().commit(newProxy); - } catch (Exception ex) { - Logger.error("Error importing item "+thisItem.importName+" from module "+name); - Logger.error(ex); - } + new DomainPath(new DomainPath(thisItem.initialPath), thisItem.name).getEntity(); + Logger.msg(3, "Module.importAll() - Item '"+thisItem.name+"' found."); + continue; + } catch (ObjectNotFoundException ex) { } + thisItem.create(Gateway.getLDAPLookup().getRoleManager().getAgentPath("system").getSysKey()); } - else if (thisImp instanceof ModuleAgent) { - ModuleAgent thisAgent = (ModuleAgent)thisImp; + else if (thisImp instanceof NewAgent) { + NewAgent thisAgent = (NewAgent)thisImp; try { - Gateway.getLDAPLookup().getRoleManager().getAgentPath(thisAgent.importName); - Logger.msg(3, "Module.importAll() - User '"+thisAgent.importName+"' found."); - continue; + Gateway.getLDAPLookup().getRoleManager().getAgentPath(thisAgent.name); + Logger.msg(3, "Module.importAll() - User '"+thisAgent.name+"' found."); + continue; } catch (ObjectNotFoundException ex) { } - Logger.msg("Module.importAll() - User '"+thisAgent.importName+"' not found. Creating."); + Logger.msg("Module.importAll() - User '"+thisAgent.name+"' not found. Creating."); - NewAgent agent = new NewAgent(thisAgent.importName, thisAgent.password); - agent.roles = thisAgent.roles; - try { - serverEntity.requestAction( - Gateway.getLDAPLookup().getRoleManager().getAgentPath("system").getSysKey(), - "workflow/predefined/CreateNewAgent", - Transitions.DONE, - CastorXMLUtility.marshall(agent)); - } catch (Exception ex) { - Logger.error("Error importing agent "+thisAgent.importName+" from module "+name); - Logger.error(ex); - } + thisAgent.create(Gateway.getLDAPLookup().getRoleManager().getAgentPath("system").getSysKey()); } } } - public Properties getClientProperties() { - return clientProps; - } - - public Properties getServerProperties() { - return serverProps; + 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() { @@ -310,18 +207,18 @@ public class Module { return name; } public String getDesc() { - return desc; + return info.desc; } public String getVersion() { - return version; + return info.version; } public String getResURL() { return resURL; } public ArrayList getDependencies() { - return dependency; + return info.dependency; } public boolean hasDependency(String dep) { - return dependency.contains(dep); + return info.dependency.contains(dep); } } \ No newline at end of file diff --git a/src/main/java/com/c2kernel/process/module/ModuleAgent.java b/src/main/java/com/c2kernel/process/module/ModuleAgent.java deleted file mode 100644 index d90ac2e..0000000 --- a/src/main/java/com/c2kernel/process/module/ModuleAgent.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.c2kernel.process.module; - -import java.util.ArrayList; - - -public class ModuleAgent extends ModuleImport { - String password; - ArrayList roles = new ArrayList(); -} \ No newline at end of file diff --git a/src/main/java/com/c2kernel/process/module/ModuleConfig.java b/src/main/java/com/c2kernel/process/module/ModuleConfig.java new file mode 100644 index 0000000..cc9acd2 --- /dev/null +++ b/src/main/java/com/c2kernel/process/module/ModuleConfig.java @@ -0,0 +1,22 @@ +package com.c2kernel.process.module; + +public class ModuleConfig { + + public String name; + public String value; + public String target; + + public ModuleConfig() { + } + + public ModuleConfig(String name, String value, String target) { + super(); + this.name = name; + this.value = value; + this.target = target; + } + + public boolean include(boolean isServer) { + return (target == null || target.length() == 0 || isServer == target.equals("server")); + } +} diff --git a/src/main/java/com/c2kernel/process/module/ModuleImport.java b/src/main/java/com/c2kernel/process/module/ModuleImport.java index f505a40..60193c7 100644 --- a/src/main/java/com/c2kernel/process/module/ModuleImport.java +++ b/src/main/java/com/c2kernel/process/module/ModuleImport.java @@ -1,5 +1,13 @@ package com.c2kernel.process.module; +import org.w3c.dom.Element; + public abstract class ModuleImport { - String importName; + + Element elem; + public String name; + + public ModuleImport(Element elem) { + this.elem = elem; + } } \ No newline at end of file diff --git a/src/main/java/com/c2kernel/process/module/ModuleImports.java b/src/main/java/com/c2kernel/process/module/ModuleImports.java new file mode 100644 index 0000000..d8c56ce --- /dev/null +++ b/src/main/java/com/c2kernel/process/module/ModuleImports.java @@ -0,0 +1,18 @@ +package com.c2kernel.process.module; + +import java.util.ArrayList; + +import com.c2kernel.utils.CastorArrayList; + +public class ModuleImports extends CastorArrayList { + + public ModuleImports() + { + super(); + } + + public ModuleImports(ArrayList aList) + { + super(aList); + } +} diff --git a/src/main/java/com/c2kernel/process/module/ModuleInfo.java b/src/main/java/com/c2kernel/process/module/ModuleInfo.java new file mode 100644 index 0000000..55e02c9 --- /dev/null +++ b/src/main/java/com/c2kernel/process/module/ModuleInfo.java @@ -0,0 +1,14 @@ +package com.c2kernel.process.module; + +import java.util.ArrayList; + +public class ModuleInfo { + + public String desc; + public String version; + public ArrayList dependency = new ArrayList(); + + public ModuleInfo() { + } + +} diff --git a/src/main/java/com/c2kernel/process/module/ModuleItem.java b/src/main/java/com/c2kernel/process/module/ModuleItem.java deleted file mode 100644 index f74788d..0000000 --- a/src/main/java/com/c2kernel/process/module/ModuleItem.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.c2kernel.process.module; - -import java.util.ArrayList; -import java.util.HashMap; - -import com.c2kernel.lifecycle.instance.predefined.entitycreation.Aggregation; -import com.c2kernel.lifecycle.instance.predefined.entitycreation.Dependency; -import com.c2kernel.lifecycle.instance.predefined.entitycreation.Property; - -public class ModuleItem extends ModuleImport { - ArrayList props = new ArrayList(); - HashMap outcomes = new HashMap(); - ArrayList deps = new ArrayList(); - ArrayList aggs = new ArrayList(); - String workflow; - String initialPath; -} \ No newline at end of file diff --git a/src/main/java/com/c2kernel/process/module/ModuleManager.java b/src/main/java/com/c2kernel/process/module/ModuleManager.java index aa598fa..ca47ec9 100644 --- a/src/main/java/com/c2kernel/process/module/ModuleManager.java +++ b/src/main/java/com/c2kernel/process/module/ModuleManager.java @@ -1,15 +1,19 @@ package com.c2kernel.process.module; -import java.io.IOException; import java.net.URL; +import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.Enumeration; import java.util.Properties; +import com.c2kernel.common.CannotManageException; +import com.c2kernel.common.ObjectAlreadyExistsException; +import com.c2kernel.common.ObjectCannotBeUpdated; import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.entity.proxy.ItemProxy; import com.c2kernel.lookup.DomainPath; import com.c2kernel.process.Gateway; +import com.c2kernel.scripting.ScriptingEngineException; import com.c2kernel.utils.FileStringUtility; import com.c2kernel.utils.Logger; @@ -18,20 +22,22 @@ public class ModuleManager { Properties props = new Properties(); boolean isServer; - public ModuleManager(Enumeration moduleEnum, boolean isServer) throws ModuleException{ + public ModuleManager(Enumeration moduleEnum, boolean isServer) throws ModuleException { this.isServer = isServer; ArrayList loadedModules = new ArrayList(); ArrayList moduleNs = new ArrayList(); while(moduleEnum.hasMoreElements()) { URL newModuleURL = moduleEnum.nextElement(); try { + //Module newModule = (Module)Gateway.getMarshaller().unmarshall(FileStringUtility.url2String(newModuleURL)); + //Resource.addModuleBaseURL(newModule.ns, newModule.resURL); Module newModule = new Module(FileStringUtility.url2String(newModuleURL)); modules.add(newModule); if (loadedModules.contains(newModule.getName())) throw new ModuleException("Module name clash: "+newModule.getName()); if (moduleNs.contains(newModule.getNs())) throw new ModuleException("Module namespace clash: "+newModule.getNs()); Logger.debug(4, "Module found: "+newModule.getNs()+" - "+newModule.getName()); loadedModules.add(newModule.getName()); moduleNs.add(newModule.getNs()); - Properties modProp = isServer?newModule.getServerProperties():newModule.getClientProperties(); + Properties modProp = newModule.getProperties(isServer); for (Enumeration e = modProp.propertyNames(); e.hasMoreElements();) { String propName = (String)e.nextElement(); props.put(propName, modProp.get(propName)); @@ -39,7 +45,7 @@ public class ModuleManager { } catch (ModuleException e) { Logger.error("Could not load module description from "+newModuleURL); throw e; - } catch (IOException e) { + } catch (Exception e) { Logger.error(e); throw new ModuleException("Could not load module.xml from "+newModuleURL); } @@ -76,11 +82,16 @@ public class ModuleManager { public void runScripts(String event) { for (Module thisMod : modules) { - thisMod.runScript(event, isServer); + try { + thisMod.runScript(event, isServer); + } catch (ScriptingEngineException e) { + Logger.error(e); + Logger.die(e.getMessage()); + } } } - public void registerModules() throws ObjectNotFoundException { + public void registerModules() throws ObjectNotFoundException, ObjectCannotBeUpdated, CannotManageException, ObjectAlreadyExistsException, NoSuchAlgorithmException { ItemProxy serverEntity = (ItemProxy)Gateway.getProxyManager().getProxy(new DomainPath("/servers/"+Gateway.getProperty("ItemServer.name"))); Logger.debug(3, "Registering modules"); for (Module thisMod : modules) { @@ -89,4 +100,15 @@ public class ModuleManager { Logger.msg("Module "+thisMod.getName()+" registered"); } } + + public void dumpModules() { + for (Module thisMod : modules) { + try { + FileStringUtility.string2File(thisMod.getName()+".xml", Gateway.getMarshaller().marshall(thisMod)); + } catch (Exception e) { + Logger.error(e); + } + } + + } } diff --git a/src/main/java/com/c2kernel/process/module/ModuleResource.java b/src/main/java/com/c2kernel/process/module/ModuleResource.java index 98d15d4..f355f6f 100644 --- a/src/main/java/com/c2kernel/process/module/ModuleResource.java +++ b/src/main/java/com/c2kernel/process/module/ModuleResource.java @@ -1,6 +1,21 @@ package com.c2kernel.process.module; +import org.w3c.dom.Element; +import org.w3c.dom.Text; + public class ModuleResource extends ModuleImport { - String resourceType; - String resourceLocation; + + public String resourceType; + public String resourceLocation; + + public ModuleResource() { + super(null); + } + + public ModuleResource(Element elem) { + super(elem); + resourceType = elem.getAttribute("type"); + resourceLocation = ((Text)elem.getFirstChild()).getData(); + } + } \ No newline at end of file diff --git a/src/main/java/com/c2kernel/process/module/ModuleScript.java b/src/main/java/com/c2kernel/process/module/ModuleScript.java new file mode 100644 index 0000000..8612843 --- /dev/null +++ b/src/main/java/com/c2kernel/process/module/ModuleScript.java @@ -0,0 +1,33 @@ +package com.c2kernel.process.module; + +import com.c2kernel.scripting.ErrorInfo; +import com.c2kernel.scripting.Script; +import com.c2kernel.scripting.ScriptingEngineException; + +public class ModuleScript { + + + public String target; + public String event; + public String lang; + public String script; + public ModuleScript() { + } + + public ModuleScript(String target, String event, String lang, String script) { + super(); + this.target = target; + this.event = event; + this.lang = lang; + this.script = script; + } + + public Script getScript() throws ScriptingEngineException { + return new Script(lang, script, ErrorInfo.class); + } + + public boolean shouldRun(String event, boolean isServer) { + return ((this.target == null || this.target.length() == 0 || isServer == target.equals("server")) && + (this.event == null || this.event.length() == 0 || event.equals(this.event))); + } +} -- cgit v1.2.3