From da731d2bb81666b9c697d9099da632e7dfcdc0f7 Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Tue, 9 Sep 2014 12:13:21 +0200 Subject: Replaced int sysKey Item identifier with UUID, which is now portable. ItemPath objects are now used to identify Items throughout the kernel, replacing ints and Integers. --- .../java/com/c2kernel/process/module/Module.java | 135 ++++++++++++++------- .../com/c2kernel/process/module/ModuleImport.java | 60 ++++++++- .../com/c2kernel/process/module/ModuleManager.java | 14 +-- .../c2kernel/process/module/ModuleResource.java | 46 +++++++ 4 files changed, 203 insertions(+), 52 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 1272026..2f4592f 100644 --- a/src/main/java/com/c2kernel/process/module/Module.java +++ b/src/main/java/com/c2kernel/process/module/Module.java @@ -4,34 +4,38 @@ import java.util.ArrayList; import java.util.Properties; import com.c2kernel.common.ObjectNotFoundException; +import com.c2kernel.entity.imports.ImportAgent; 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.imports.ImportRole; 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.property.Property; import com.c2kernel.scripting.ErrorInfo; import com.c2kernel.scripting.ScriptingEngineException; import com.c2kernel.utils.Logger; -public class Module { +public class Module extends ImportItem { - 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; + private ModuleInfo info; + private String resURL; + private ModuleImports imports = new ModuleImports(); + private ArrayList config = new ArrayList(); + private ArrayList scripts = new ArrayList(); public Module() { super(); + // Module properties + properties.add(new com.c2kernel.property.Property("Type", "Module", false)); + setInitialPath("/desc/modules/"); + setWorkflow("NoWorkflow"); + setWorkflowVer(0); + imports.list.add(this); } public void runScript(String event, AgentProxy user, boolean isServer) throws ScriptingEngineException { @@ -51,36 +55,41 @@ public class Module { } } - 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("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 + public void setModuleXML(String moduleXML) { ImportOutcome moduleOutcome = new ImportOutcome("Module", 0, "last", null); moduleOutcome.data = moduleXML; - moduleItem.outcomes.add(moduleOutcome); - imports.list.add(moduleItem); + outcomes.add(moduleOutcome); } + @Override + public void setNamespace(String ns) { + super.setNamespace(ns); + replaceProp(new Property("Namespace", ns, false)); + } + + @Override + public void setName(String name) { + super.setName(name); + replaceProp(new Property("Name", name, false)); + } + + private void replaceProp(Property newProp) { + for (Property prop : properties) { + if (prop.getName().equals("Namespace")) { + prop.setMutable(newProp.isMutable()); + prop.setValue(newProp.getValue()); + return; + } + } + properties.add(newProp); + } public void importAll(ItemProxy serverEntity, AgentProxy systemAgent, String moduleXML, boolean reset) throws Exception { - int systemAgentId = systemAgent.getSystemKey(); - addModuleItem(moduleXML); + setModuleXML(moduleXML); for (ModuleResource thisRes : imports.getResources()) { try { - thisRes.path = Bootstrap.verifyResource(ns, thisRes.name, thisRes.version, - thisRes.resourceType, thisRes.resourceLocation, reset); + thisRes.setNamespace(ns); + thisRes.create(systemAgent.getPath(), reset); } catch (Exception ex) { Logger.error(ex); Logger.die("Error importing module resources. Unsafe to continue."); @@ -91,13 +100,13 @@ public class Module { RolePath rolePath; try { rolePath = Gateway.getLookup().getRolePath(thisRole.name); - if (rolePath.hasJobList() != thisRole.jobList) { + if (rolePath.hasJobList() != thisRole.hasJobList()) { Logger.msg("Module.importAll() - Role '"+thisRole.name+"' has incorrect joblist settings. Correcting."); - rolePath.setHasJobList(thisRole.jobList); + rolePath.setHasJobList(thisRole.hasJobList()); } } catch (ObjectNotFoundException ex) { Logger.msg("Module.importAll() - Role '"+thisRole.name+"' not found. Creating."); - thisRole.create(systemAgentId); + thisRole.create(systemAgent.getPath(), reset); } } @@ -108,12 +117,12 @@ public class Module { continue; } catch (ObjectNotFoundException ex) { } Logger.msg("Module.importAll() - User '"+thisAgent.name+"' not found. Creating."); - thisAgent.create(systemAgentId); + thisAgent.create(systemAgent.getPath(), reset); } for (ImportItem thisItem : imports.getItems()) { thisItem.setNamespace(ns); - thisItem.create(systemAgentId, reset); + thisItem.create(systemAgent.getPath(), reset); } } @@ -126,12 +135,13 @@ public class Module { } return props; } - - public String getNs() { - return ns; + + public ArrayList getScripts() { + return scripts; } - public String getName() { - return name; + + public void setResURL(String resURL) { + this.resURL = resURL; } public String getDesc() { return info.desc; @@ -148,4 +158,43 @@ public class Module { public boolean hasDependency(String dep) { return info.dependency.contains(dep); } + + public ModuleInfo getInfo() { + return info; + } + + public void setInfo(ModuleInfo info) { + this.info = info; + replaceProp(new Property("Version", info.version, true)); + } + + public ModuleImports getImports() { + return imports; + } + + public void setImports(ModuleImports imp) { + // Add dependency for all children + imports = imp; + ImportDependency children = new ImportDependency("Contents"); + for (ModuleImport thisImport : imports.list) { + DomainPath path = thisImport.domainPath; + if (path != null) + children.dependencyMemberList.add(new ImportDependencyMember(path.toString())); + } + dependencyList.add(children); + } + + public void setConfig(ArrayList config) { + this.config = config; + } + + public void setScripts(ArrayList scripts) { + this.scripts = scripts; + } + + public ArrayList getConfig() { + return config; + } + + } diff --git a/src/main/java/com/c2kernel/process/module/ModuleImport.java b/src/main/java/com/c2kernel/process/module/ModuleImport.java index 1f5b16d..f54b47d 100644 --- a/src/main/java/com/c2kernel/process/module/ModuleImport.java +++ b/src/main/java/com/c2kernel/process/module/ModuleImport.java @@ -1,10 +1,66 @@ package com.c2kernel.process.module; +import java.util.UUID; + +import com.c2kernel.common.CannotManageException; +import com.c2kernel.common.ObjectAlreadyExistsException; +import com.c2kernel.common.ObjectCannotBeUpdated; +import com.c2kernel.common.ObjectNotFoundException; +import com.c2kernel.lookup.AgentPath; import com.c2kernel.lookup.DomainPath; +import com.c2kernel.lookup.ItemPath; public abstract class ModuleImport { - public String name; - public DomainPath path; + protected String ns; + protected String name; + protected DomainPath domainPath; + protected ItemPath itemPath; + + public ModuleImport() { + } + + public abstract void create(AgentPath agentPath, boolean reset) throws ObjectNotFoundException, + ObjectCannotBeUpdated, CannotManageException, ObjectAlreadyExistsException; + + public void setID( String uuid ) + { + if (uuid != null) itemPath = new ItemPath(UUID.fromString(uuid)); + } + + public String getID() { + return itemPath==null?null:itemPath.getUUID().toString(); + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public void setNamespace(String ns) { + this.ns = ns; + } + public String getNamespace() { + return ns; + } + + public DomainPath getDomainPath() { + return domainPath; + } + + public void setDomainPath(DomainPath domainPath) { + this.domainPath = domainPath; + } + + public ItemPath getItemPath() { + return itemPath; + } + + public void setItemPath(ItemPath itemPath) { + this.itemPath = itemPath; + } } \ 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 6a69ff8..4fde044 100644 --- a/src/main/java/com/c2kernel/process/module/ModuleManager.java +++ b/src/main/java/com/c2kernel/process/module/ModuleManager.java @@ -49,13 +49,13 @@ public class ModuleManager { if (errors.length() > 0) throw new ModuleException("Module XML found at "+newModuleURL+" was not valid: "+errors); Module newModule = (Module)Gateway.getMarshaller().unmarshall(moduleXML); - if (newModule.resURL != null && newModule.resURL.length()>0) Gateway.getResource().addModuleBaseURL(newModule.ns, newModule.resURL); + if (newModule.getResURL() != null && newModule.getResURL().length()>0) Gateway.getResource().addModuleBaseURL(newModule.getNamespace(), newModule.getResURL()); modules.add(newModule); - modulesXML.put(newModule.ns, moduleXML); + modulesXML.put(newModule.getNamespace(), 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()); - loadedModules.add(newModule.getName()); moduleNs.add(newModule.getNs()); + if (moduleNs.contains(newModule.getNamespace())) throw new ModuleException("Module namespace clash: "+newModule.getNamespace()); + Logger.debug(4, "Module found: "+newModule.getNamespace()+" - "+newModule.getName()); + loadedModules.add(newModule.getName()); moduleNs.add(newModule.getNamespace()); } catch (ModuleException e) { Logger.error("Could not load module description from "+newModuleURL); throw e; @@ -156,9 +156,9 @@ public class ModuleManager { Logger.msg("Registering module "+thisMod.getName()); try { - String nsReset = Gateway.getProperties().getProperty("Module."+thisMod.ns+".reset"); + String nsReset = Gateway.getProperties().getProperty("Module."+thisMod.getNamespace()+".reset"); boolean thisReset = nsReset == null?reset:nsReset.equals("true"); - thisMod.importAll(serverEntity, user, modulesXML.get(thisMod.ns), thisReset); + thisMod.importAll(serverEntity, user, modulesXML.get(thisMod.getNamespace()), thisReset); } catch (Exception e) { Logger.error(e); throw new ModuleException("Error importing items for module "+thisMod.getName()); diff --git a/src/main/java/com/c2kernel/process/module/ModuleResource.java b/src/main/java/com/c2kernel/process/module/ModuleResource.java index b36623f..874c7cc 100644 --- a/src/main/java/com/c2kernel/process/module/ModuleResource.java +++ b/src/main/java/com/c2kernel/process/module/ModuleResource.java @@ -1,5 +1,13 @@ package com.c2kernel.process.module; +import com.c2kernel.common.CannotManageException; +import com.c2kernel.common.ObjectAlreadyExistsException; +import com.c2kernel.common.ObjectCannotBeUpdated; +import com.c2kernel.common.ObjectNotFoundException; +import com.c2kernel.lookup.AgentPath; +import com.c2kernel.process.Bootstrap; +import com.c2kernel.utils.Logger; + public class ModuleResource extends ModuleImport { public Integer version; @@ -8,4 +16,42 @@ public class ModuleResource extends ModuleImport { public ModuleResource() { } + + @Override + public void create(AgentPath agentPath, boolean reset) + throws ObjectNotFoundException, ObjectCannotBeUpdated, + CannotManageException, ObjectAlreadyExistsException { + try { + domainPath = Bootstrap.verifyResource(ns, name, version, resourceType, itemPath, resourceLocation, reset); + } catch (Exception e) { + Logger.error(e); + throw new CannotManageException("Exception verifying module resource "+ns+"/"+name); + } + } + + public int getVersion() { + return version; + } + + public void setVersion(int version) { + this.version = version; + } + + public String getResourceType() { + return resourceType; + } + + public void setResourceType(String resourceType) { + this.resourceType = resourceType; + } + + public String getResourceLocation() { + return resourceLocation; + } + + public void setResourceLocation(String resourceLocation) { + this.resourceLocation = resourceLocation; + } + + } \ No newline at end of file -- cgit v1.2.3