From b53164978a9a264fbe26679c07e32731a4d495f9 Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Fri, 6 Jul 2012 15:50:45 +0200 Subject: Remove XML parsing from module processing, use Castor unmarshalling instead. Create module item with collection of imported Items and module XML registered as an outcome. --- .../java/com/c2kernel/process/module/Module.java | 140 +++++---------------- .../com/c2kernel/process/module/ModuleImport.java | 8 +- .../com/c2kernel/process/module/ModuleManager.java | 12 +- .../c2kernel/process/module/ModuleResource.java | 20 +-- 4 files changed, 51 insertions(+), 129 deletions(-) (limited to 'src/main/java/com/c2kernel/process/module') diff --git a/src/main/java/com/c2kernel/process/module/Module.java b/src/main/java/com/c2kernel/process/module/Module.java index 22f4543..4a0987a 100644 --- a/src/main/java/com/c2kernel/process/module/Module.java +++ b/src/main/java/com/c2kernel/process/module/Module.java @@ -1,26 +1,19 @@ package com.c2kernel.process.module; -import java.io.StringReader; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.Properties; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; -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.lifecycle.instance.predefined.entitycreation.Dependency; +import com.c2kernel.lifecycle.instance.predefined.entitycreation.DependencyMember; import com.c2kernel.lifecycle.instance.predefined.entitycreation.NewAgent; import com.c2kernel.lifecycle.instance.predefined.entitycreation.NewItem; +import com.c2kernel.lifecycle.instance.predefined.entitycreation.Outcome; import com.c2kernel.lookup.DomainPath; import com.c2kernel.process.Bootstrap; import com.c2kernel.process.Gateway; @@ -37,109 +30,12 @@ public class Module { public ModuleImports imports = new ModuleImports(); public ArrayList config = new ArrayList(); public ArrayList scripts = new ArrayList(); - private static DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - private DocumentBuilder parser; - private Document moduleDOM; + public NewItem moduleItem; - static { - dbf.setValidating(false); - dbf.setNamespaceAware(false); - } - public Module() { super(); } - public Module(String moduleXML) throws ModuleException { - try { - parser = dbf.newDocumentBuilder(); - moduleDOM = parser.parse(new InputSource(new StringReader(moduleXML))); - } catch (Exception e) { - Logger.error(e); - throw new ModuleException("Could not process modules. XML Parser exception"); - } - - Element root = (Element)moduleDOM.getElementsByTagName("CristalModule").item(0); - - // Get module metadata - ns = root.getAttribute("ns"); - name = root.getAttribute("name"); - - 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; i0) { - resURL = ((Text)nl.item(0).getFirstChild()).getData(); - Resource.addModuleBaseURL(ns, resURL); - } - - // Get config properties - nl = root.getElementsByTagName("Config"); - for (int i=0; i0) { - Element impElem = (Element)nl.item(0); - nl = impElem.getChildNodes(); - for (int i=0; i modules = new ArrayList(); + HashMap modulesXML = new HashMap(); Properties props = new Properties(); boolean isServer; @@ -29,10 +32,11 @@ public class ModuleManager { 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)); + String moduleXML = FileStringUtility.url2String(newModuleURL); + Module newModule = (Module)Gateway.getMarshaller().unmarshall(moduleXML); + Resource.addModuleBaseURL(newModule.ns, newModule.resURL); modules.add(newModule); + modulesXML.put(newModule.ns, moduleXML); 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()); @@ -96,7 +100,7 @@ public class ModuleManager { Logger.debug(3, "Registering modules"); for (Module thisMod : modules) { Logger.msg("Registering module "+thisMod.getName()); - thisMod.importAll(serverEntity); + thisMod.importAll(serverEntity, modulesXML.get(thisMod.ns)); Logger.msg("Module "+thisMod.getName()+" registered"); } } diff --git a/src/main/java/com/c2kernel/process/module/ModuleResource.java b/src/main/java/com/c2kernel/process/module/ModuleResource.java index f355f6f..274e522 100644 --- a/src/main/java/com/c2kernel/process/module/ModuleResource.java +++ b/src/main/java/com/c2kernel/process/module/ModuleResource.java @@ -1,21 +1,23 @@ package com.c2kernel.process.module; -import org.w3c.dom.Element; -import org.w3c.dom.Text; - public class ModuleResource extends ModuleImport { 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(); + @Override + public String getPath(String ns) { + StringBuffer path = new StringBuffer(); + if (resourceType.equals("CA") || resourceType.equals("EA")) + path.append("/desc/ActivityDesc/"); + if (resourceType.equals("SC")) + path.append("/desc/Script/"); + if (resourceType.equals("OD")) + path.append("/desc/OutcomeDesc/"); + path.append("system/").append(ns==null?"kernel":ns); + return path.toString(); } - } \ No newline at end of file -- cgit v1.2.3