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. --- .../java/com/c2kernel/process/module/Module.java | 255 ++++++--------------- 1 file changed, 76 insertions(+), 179 deletions(-) (limited to 'src/main/java/com/c2kernel/process/module/Module.java') 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 -- cgit v1.2.3