summaryrefslogtreecommitdiff
path: root/src/main/java/com/c2kernel/process/module
diff options
context:
space:
mode:
authorAndrew Branson <andrew.branson@cern.ch>2012-07-06 11:00:24 +0200
committerAndrew Branson <andrew.branson@cern.ch>2012-07-06 11:00:24 +0200
commit24314dc1699c7e73048fa24e33729f1aa1ec0e86 (patch)
treec97af82997783b860c36f4410973b23caff0d42e /src/main/java/com/c2kernel/process/module
parentcc79e98c4763affba4fa2e17dfe5a412f9de66c3 (diff)
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.
Diffstat (limited to 'src/main/java/com/c2kernel/process/module')
-rw-r--r--src/main/java/com/c2kernel/process/module/Module.java255
-rw-r--r--src/main/java/com/c2kernel/process/module/ModuleAgent.java9
-rw-r--r--src/main/java/com/c2kernel/process/module/ModuleConfig.java22
-rw-r--r--src/main/java/com/c2kernel/process/module/ModuleImport.java10
-rw-r--r--src/main/java/com/c2kernel/process/module/ModuleImports.java18
-rw-r--r--src/main/java/com/c2kernel/process/module/ModuleInfo.java14
-rw-r--r--src/main/java/com/c2kernel/process/module/ModuleItem.java17
-rw-r--r--src/main/java/com/c2kernel/process/module/ModuleManager.java34
-rw-r--r--src/main/java/com/c2kernel/process/module/ModuleResource.java19
-rw-r--r--src/main/java/com/c2kernel/process/module/ModuleScript.java33
10 files changed, 217 insertions, 214 deletions
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<String> dependency = new ArrayList<String>();
- private final Properties clientProps = new Properties();
- private final Properties serverProps = new Properties();
- private final HashMap<String, Script> clientScripts = new HashMap<String, Script>();
- private final HashMap<String, Script> serverScripts = new HashMap<String, Script>();
- private final ArrayList<ModuleImport> imports = new ArrayList<ModuleImport>();
+ public String ns, name;
+ public ModuleInfo info;
+ public String resURL;
+ public ModuleImports imports = new ModuleImports();
+ public ArrayList<ModuleConfig> config = new ArrayList<ModuleConfig>();
+ public ArrayList<ModuleScript> scripts = new ArrayList<ModuleScript>();
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<nl.getLength();i++)
- dependency.add(((Text)nl.item(i).getFirstChild()).getData());
+ info.dependency.add(((Text)nl.item(i).getFirstChild()).getData());
// register resource URL
nl = root.getElementsByTagName("ResourceURL");
@@ -95,9 +87,7 @@ public class Module {
String target = confElement.getAttribute("target");
String name = confElement.getAttribute("name");
String value = ((Text)confElement.getFirstChild()).getData();
- // target can be 'client', 'server' or missing, which implies both.
- if (!target.equals("client")) serverProps.put(name, value);
- if (!target.equals("server")) clientProps.put(name, value);
+ config.add(new ModuleConfig(name, value, target));
}
// find scripts
@@ -107,15 +97,7 @@ public class Module {
String target = confElement.getAttribute("target");
String event = confElement.getAttribute("event");
String lang = confElement.getAttribute("lang");
- try {
- Script thisScript = new Script(lang, ((Text)confElement.getFirstChild()).getData(), ErrorInfo.class);
- // target can be 'client', 'server' or missing, which implies both.
- if (!target.equals("client")) serverScripts.put(event, thisScript);
- if (!target.equals("server")) clientScripts.put(event, thisScript);
- } catch (ScriptingEngineException e) {
- Logger.error(e);
- throw new ModuleException("Could not process module script");
- }
+ scripts.add(new ModuleScript(target, event, lang, ((Text)confElement.getFirstChild()).getData()));
}
// Get imports
@@ -129,67 +111,15 @@ public class Module {
ModuleImport newImp;
String type = imp.getTagName();
if (type.equals("Resource")) {
- ModuleResource newRes = new ModuleResource();
- newRes.resourceType = imp.getAttribute("type");
- newRes.resourceLocation = ((Text)imp.getFirstChild()).getData();
+ ModuleResource newRes = new ModuleResource(imp);
newImp = newRes;
}
else if (type.equals("Item")) {
- ModuleItem newItem = new ModuleItem();
- newItem.workflow = imp.getAttribute("workflow");
- if (imp.hasAttribute("initialPath"))
- newItem.initialPath = imp.getAttribute("initialPath");
- else
- newItem.initialPath = "/desc/"+ns;
- NodeList pnl = imp.getElementsByTagName("Property");
- for (int j=0; j<pnl.getLength(); j++) {
- Element p = (Element)pnl.item(j);
- newItem.props.add(new Property(p.getAttribute("name"), ((Text)p.getFirstChild()).getData()));
- }
- NodeList ocnl = imp.getElementsByTagName("Outcome");
- for (int j=0; j<ocnl.getLength(); j++) {
- Element oc = (Element)ocnl.item(j);
- newItem.outcomes.put(oc.getAttribute("schema")+":"+oc.getAttribute("version")+":"+oc.getAttribute("viewname"), ((Text)oc.getFirstChild()).getData());
- }
- NodeList depnl = imp.getElementsByTagName("Dependency");
- for (int j=0; j<depnl.getLength(); j++) {
- Element dep = (Element)depnl.item(j);
- Dependency newDep = new Dependency();
- newDep.name = dep.getAttribute("name");
- newDep.isDescription = dep.getAttribute("isDescription").equals("true");
- NodeList depmemnl = dep.getElementsByTagName("DependencyMember");
- for (int k=0; k<depmemnl.getLength(); k++) {
- newDep.dependencyMemberList.add(new DependencyMember(((Text)depmemnl.item(k).getFirstChild()).getData()));
- }
- newItem.deps.add(newDep);
- }
- NodeList aggnl = imp.getElementsByTagName("Aggregation");
- for (int j=0; j<aggnl.getLength(); j++) {
- Element agg = (Element)aggnl.item(j);
- Aggregation newAgg = new Aggregation();
- newAgg.name = agg.getAttribute("name");
- newAgg.isDescription = agg.getAttribute("isDescription").equals("true");
- NodeList depmemnl = agg.getElementsByTagName("AggregationMember");
- for (int k=0; k<depmemnl.getLength(); k++) {
- Element memElem = (Element)depmemnl.item(k);
- Element geom = (Element)memElem.getElementsByTagName("Geometry").item(0);
- //HACK: please kill me
- AggregationMember newAggMem = new AggregationMember(Integer.parseInt(memElem.getAttribute("slotNo")), memElem.getAttribute("itemDescriptionPath"),
- memElem.getAttribute("itemPath"), new Geometry(Integer.parseInt(geom.getAttribute("x")), Integer.parseInt(geom.getAttribute("y")),
- Integer.parseInt(geom.getAttribute("width")), Integer.parseInt(geom.getAttribute("height"))));
- newAgg.aggregationMemberList.add(newAggMem);
- }
- newItem.aggs.add(newAgg);
- }
+ NewItem newItem = new NewItem(ns, imp);
newImp = newItem;
}
else if (type.equals("Agent")) {
- ModuleAgent newAgent = new ModuleAgent();
- newAgent.password = imp.getAttribute("password");
- NodeList rolenl = imp.getElementsByTagName("Role");
- for (int j=0; j<rolenl.getLength(); j++) {
- newAgent.roles.add(((Text)rolenl.item(j).getFirstChild()).getData());
- }
+ NewAgent newAgent = new NewAgent(imp);
newImp = newAgent;
}
else {
@@ -197,110 +127,77 @@ public class Module {
continue;
}
- newImp.importName = imp.getAttribute("name");
- imports.add(newImp);
- Logger.msg(8, "Found import "+imports.size()+"- "+newImp.importName+": "+newImp.getClass().getSimpleName());
+ newImp.name = imp.getAttribute("name");
+ imports.list.add(newImp);
+ Logger.msg(8, "Found import "+imports.list.size()+"- "+newImp.name+": "+newImp.getClass().getSimpleName());
}
}
}
- public ErrorInfo runScript(String event, boolean isServer) {
- HashMap<String, Script> 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<String> 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<String> roles = new ArrayList<String>();
-} \ 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<ModuleImport> {
+
+ public ModuleImports()
+ {
+ super();
+ }
+
+ public ModuleImports(ArrayList<ModuleImport> 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<String> dependency = new ArrayList<String>();
+
+ 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<Property> props = new ArrayList<Property>();
- HashMap<String, String> outcomes = new HashMap<String, String>();
- ArrayList<Dependency> deps = new ArrayList<Dependency>();
- ArrayList<Aggregation> aggs = new ArrayList<Aggregation>();
- 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<URL> moduleEnum, boolean isServer) throws ModuleException{
+ public ModuleManager(Enumeration<URL> moduleEnum, boolean isServer) throws ModuleException {
this.isServer = isServer;
ArrayList<String> loadedModules = new ArrayList<String>();
ArrayList<String> moduleNs = new ArrayList<String>();
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)));
+ }
+}