From be9aa9c636204051381f4efe4b895dff968f0c4d Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Fri, 17 May 2013 11:44:46 +0200 Subject: Add Role management support to module, instead of just creating one if it's not already there. Supports 'jobList' attribute to enable job pushing --- .../predefined/entitycreation/NewAgent.java | 2 +- .../predefined/entitycreation/NewRole.java | 24 ++++++++++++++ .../java/com/c2kernel/lookup/LDAPRoleManager.java | 12 +++++++ src/main/java/com/c2kernel/lookup/RolePath.java | 5 ++- .../java/com/c2kernel/process/module/Module.java | 21 ++++++++++-- src/main/resources/boot/OD/Module.xsd | 38 ++++++++++++++++------ src/main/resources/mapFiles/NewEntityMap.xml | 9 +++++ 7 files changed, 97 insertions(+), 14 deletions(-) create mode 100644 src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/NewRole.java diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/NewAgent.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/NewAgent.java index f13bced..e7301a1 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/NewAgent.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/NewAgent.java @@ -51,7 +51,7 @@ public class NewAgent extends ModuleImport implements java.io.Serializable { try { thisRole = Gateway.getLDAPLookup().getRoleManager().getRolePath(role); } catch (ObjectNotFoundException ex) { - thisRole = Gateway.getLDAPLookup().getRoleManager().createRole(role, false); + throw new ObjectNotFoundException("Role "+role+" does not exist."); } thisRole.addAgent(newAgent); } diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/NewRole.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/NewRole.java new file mode 100644 index 0000000..1800b0e --- /dev/null +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/NewRole.java @@ -0,0 +1,24 @@ +package com.c2kernel.lifecycle.instance.predefined.entitycreation; + +import com.c2kernel.common.ObjectAlreadyExistsException; +import com.c2kernel.common.ObjectCannotBeUpdated; +import com.c2kernel.process.Gateway; +import com.c2kernel.process.module.ModuleImport; + +public class NewRole extends ModuleImport { + + public boolean jobList; + + public NewRole() { + } + + @Override + public String getPath(String ns) { + return null; // roles don't have user-specified domain paths + } + + public void create(int agentId) throws ObjectAlreadyExistsException, ObjectCannotBeUpdated { + Gateway.getLDAPLookup().getRoleManager().createRole(name, jobList); + } + +} diff --git a/src/main/java/com/c2kernel/lookup/LDAPRoleManager.java b/src/main/java/com/c2kernel/lookup/LDAPRoleManager.java index 0536d6c..b2cffc6 100644 --- a/src/main/java/com/c2kernel/lookup/LDAPRoleManager.java +++ b/src/main/java/com/c2kernel/lookup/LDAPRoleManager.java @@ -196,4 +196,16 @@ public class LDAPRoleManager { throw new ObjectNotFoundException("Entry was not a Role"); } + public void setHasJobList(RolePath role, boolean hasJobList) throws ObjectNotFoundException, ObjectCannotBeUpdated { + // get entry + LDAPEntry roleEntry; + try { + roleEntry = LDAPLookupUtils.getEntry(mLdap.getConnection(), role.getFullDN()); + } catch (ObjectNotFoundException e) { + throw new ObjectNotFoundException("Role does not exist", ""); + } + // set attribute + LDAPLookupUtils.setAttributeValue(mLdap.getConnection(), roleEntry, "jobList", hasJobList?"TRUE":"FALSE"); + } + } diff --git a/src/main/java/com/c2kernel/lookup/RolePath.java b/src/main/java/com/c2kernel/lookup/RolePath.java index e6593ea..0e07012 100644 --- a/src/main/java/com/c2kernel/lookup/RolePath.java +++ b/src/main/java/com/c2kernel/lookup/RolePath.java @@ -51,9 +51,12 @@ public class RolePath extends DomainPath } /** * @param hasJobList The hasJobList to set. + * @throws ObjectCannotBeUpdated + * @throws ObjectNotFoundException */ - public void setHasJobList(boolean hasJobList) { + public void setHasJobList(boolean hasJobList) throws ObjectNotFoundException, ObjectCannotBeUpdated { this.hasJobList = hasJobList; + Gateway.getLDAPLookup().getRoleManager().setHasJobList(this, hasJobList); } diff --git a/src/main/java/com/c2kernel/process/module/Module.java b/src/main/java/com/c2kernel/process/module/Module.java index 91c43b2..33180ae 100644 --- a/src/main/java/com/c2kernel/process/module/Module.java +++ b/src/main/java/com/c2kernel/process/module/Module.java @@ -9,8 +9,10 @@ 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.NewRole; import com.c2kernel.lifecycle.instance.predefined.entitycreation.Outcome; import com.c2kernel.lookup.DomainPath; +import com.c2kernel.lookup.RolePath; import com.c2kernel.process.Bootstrap; import com.c2kernel.process.Gateway; import com.c2kernel.scripting.ErrorInfo; @@ -74,6 +76,7 @@ public class Module { public void importAll(ItemProxy serverEntity, String moduleXML) throws Exception { addModuleItem(moduleXML); + int systemAgentId = Gateway.getLDAPLookup().getRoleManager().getAgentPath("system").getSysKey(); for (ModuleImport thisImp : imports.list) { Logger.msg(1, "Checking for "+thisImp.name+" "+thisImp.getClass().getSimpleName()); if (thisImp instanceof ModuleResource) { @@ -93,7 +96,21 @@ public class Module { continue; } catch (ObjectNotFoundException ex) { } Logger.msg("Module.importAll() - Item '"+thisItem.name+"' not found. Creating."); - thisItem.create(Gateway.getLDAPLookup().getRoleManager().getAgentPath("system").getSysKey()); + thisItem.create(systemAgentId); + } + else if (thisImp instanceof NewRole) { + NewRole thisRole = (NewRole)thisImp; + RolePath rolePath; + try { + rolePath = Gateway.getLDAPLookup().getRoleManager().getRolePath(thisRole.name); + if (rolePath.hasJobList() != thisRole.jobList) { + Logger.msg("Module.importAll() - Role '"+thisRole.name+"' has incorrect joblist settings. Correcting."); + rolePath.setHasJobList(thisRole.jobList); + } + } catch (ObjectNotFoundException ex) { + Logger.msg("Module.importAll() - Role '"+thisRole.name+"' not found. Creating."); + thisRole.create(systemAgentId); + } } else if (thisImp instanceof NewAgent) { NewAgent thisAgent = (NewAgent)thisImp; @@ -103,7 +120,7 @@ public class Module { continue; } catch (ObjectNotFoundException ex) { } Logger.msg("Module.importAll() - User '"+thisAgent.name+"' not found. Creating."); - thisAgent.create(Gateway.getLDAPLookup().getRoleManager().getAgentPath("system").getSysKey()); + thisAgent.create(systemAgentId); } } } diff --git a/src/main/resources/boot/OD/Module.xsd b/src/main/resources/boot/OD/Module.xsd index 8351e65..1b54ac5 100644 --- a/src/main/resources/boot/OD/Module.xsd +++ b/src/main/resources/boot/OD/Module.xsd @@ -72,7 +72,8 @@ - + @@ -95,30 +96,35 @@ maxOccurs="unbounded"> - + - + - + - A new collection with layout + + A new collection + with layout - + - + @@ -156,17 +163,28 @@ use="optional" /> + + + + + + + + + - + - + diff --git a/src/main/resources/mapFiles/NewEntityMap.xml b/src/main/resources/mapFiles/NewEntityMap.xml index a5d5006..dcbab09 100644 --- a/src/main/resources/mapFiles/NewEntityMap.xml +++ b/src/main/resources/mapFiles/NewEntityMap.xml @@ -124,4 +124,13 @@ + + + + + + + + + -- cgit v1.2.3