diff options
Diffstat (limited to 'src/main/java/com/c2kernel/lifecycle/instance/predefined')
15 files changed, 399 insertions, 230 deletions
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/AddDomainPath.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/AddDomainPath.java index 3da17e9..4c02cbb 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/AddDomainPath.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/AddDomainPath.java @@ -15,7 +15,7 @@ import com.c2kernel.lookup.AgentPath; import com.c2kernel.lookup.DomainPath;
import com.c2kernel.lookup.InvalidItemPathException;
import com.c2kernel.lookup.ItemPath;
-import com.c2kernel.lookup.Lookup;
+import com.c2kernel.lookup.LookupManager;
import com.c2kernel.process.Gateway;
import com.c2kernel.utils.Logger;
@@ -31,14 +31,11 @@ public class AddDomainPath extends PredefinedStep protected String runActivityLogic(AgentPath agent, int itemSysKey,
int transitionID, String requestData) throws InvalidDataException {
- Logger.msg(8,"AddAlias::request()");
- Lookup lookupManager = Gateway.getLookup();
-
Logger.msg(1,"AddAlias::request() - Starting.");
-
try
{
+ LookupManager lookupManager = Gateway.getLookupManager();
DomainPath domainPath = new DomainPath(getDataList(requestData)[0], new ItemPath(itemSysKey));
lookupManager.add(domainPath);
Logger.msg(8,"AddDomainPath::request() - systemKey:" + itemSysKey +
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/CreateItemFromDescription.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/CreateItemFromDescription.java deleted file mode 100644 index e16a92c..0000000 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/CreateItemFromDescription.java +++ /dev/null @@ -1,170 +0,0 @@ -/**************************************************************************
- * CreateItemFromDescription
- *
- * $Workfile$
- * $Revision: 1.47 $
- * $Date: 2005/10/13 08:13:58 $
- *
- * Copyright (C) 2001 CERN - European Organization for Nuclear Research
- * All rights reserved.
- **************************************************************************/
-
-package com.c2kernel.lifecycle.instance.predefined;
-
-import java.util.ArrayList;
-
-import com.c2kernel.collection.Collection;
-import com.c2kernel.collection.CollectionArrayList;
-import com.c2kernel.collection.CollectionDescription;
-import com.c2kernel.collection.CollectionMember;
-import com.c2kernel.common.AccessRightsException;
-import com.c2kernel.common.InvalidDataException;
-import com.c2kernel.common.ObjectAlreadyExistsException;
-import com.c2kernel.common.ObjectNotFoundException;
-import com.c2kernel.entity.CorbaServer;
-import com.c2kernel.entity.TraceableEntity;
-import com.c2kernel.lifecycle.CompositeActivityDef;
-import com.c2kernel.lookup.AgentPath;
-import com.c2kernel.lookup.DomainPath;
-import com.c2kernel.lookup.ItemPath;
-import com.c2kernel.persistency.ClusterStorage;
-import com.c2kernel.persistency.TransactionManager;
-import com.c2kernel.process.Gateway;
-import com.c2kernel.property.Property;
-import com.c2kernel.property.PropertyArrayList;
-import com.c2kernel.property.PropertyDescriptionList;
-import com.c2kernel.property.PropertyUtility;
-import com.c2kernel.utils.LocalObjectLoader;
-import com.c2kernel.utils.Logger;
-
-/**************************************************************************
- *
- * @author $Author: abranson $ $Date: 2005/10/13 08:13:58 $
- * @version $Revision: 1.47 $
- **************************************************************************/
-public class CreateItemFromDescription extends PredefinedStep
-{
- public CreateItemFromDescription()
- {
- super();
- }
-
- //requestdata is xmlstring
- @Override
- protected String runActivityLogic(AgentPath agent, int itemSysKey,
- int transitionID, String requestData) throws InvalidDataException {
-
- String[] input = getDataList(requestData);
- String newName = input[0];
- String domPath = input[1];
- CompositeActivityDef wfDef;
- String wfDefName = null;
- int wfDefVer = -1;
- if (input.length > 2) // override wf
- wfDefName = input[2];
-
- PropertyArrayList props = new PropertyArrayList();
- Logger.msg(1, "AddNewItem::request() - Starting.");
- TransactionManager storage = Gateway.getStorage();
-
- try {
- // check if the path is already taken
- DomainPath context = new DomainPath(new DomainPath(domPath), newName);
- Logger.debug(8,"context "+context.getSysKey()+" "+context.getPath()+" "+context.getString());
- if (context.getSysKey()!=-1)
- throw new ObjectAlreadyExistsException("The item name " +newName+ " exists already.", "");
-
- // get init objects
-
- // loop through collections, collecting instantiated descriptions and finding the default workflow def
- CollectionArrayList colls = new CollectionArrayList();
- String[] collNames = storage.getClusterContents(itemSysKey, ClusterStorage.COLLECTION);
- for (String collName : collNames) {
- Collection<? extends CollectionMember> thisCol = (Collection<? extends CollectionMember>)storage.get(itemSysKey, ClusterStorage.COLLECTION+"/"+collName, null);
- if (thisCol instanceof CollectionDescription) {
- CollectionDescription<? extends CollectionMember> thisDesc = (CollectionDescription<? extends CollectionMember>)thisCol;
- colls.put(thisDesc.newInstance());
- }
- else if (thisCol.getName().equalsIgnoreCase("workflow") && wfDefName == null) {
- ArrayList<? extends CollectionMember> members = thisCol.getMembers().list;
- // get the first member from the wf collection
- CollectionMember wfMember = members.get(0);
- wfDefName = wfMember.resolveItem().getName();
- Object wfVerObj = wfMember.getProperties().get("Version");
- try {
- wfDefVer = Integer.parseInt(wfVerObj.toString());
- } catch (NumberFormatException ex) {
- throw new InvalidDataException("Invalid workflow version number: "+wfVerObj.toString(), "");
- }
- }
- }
-
- // load workflow def
- if (wfDefName == null)
- throw new InvalidDataException("No workflow given or defined", "");
- if (wfDefVer == -1)
- throw new InvalidDataException("No workflow def version given","");
-
- try {
- wfDef = (CompositeActivityDef)LocalObjectLoader.getActDef(wfDefName, wfDefVer);
- } catch (ObjectNotFoundException ex) {
- throw new InvalidDataException("Workflow def '"+wfDefName+"' item not found", "");
- } catch (ClassCastException ex) {
- throw new InvalidDataException("Activity def '"+wfDefName+"' was not Composite", "");
- }
-
-
- // copy properties -- intend to create from propdesc
- PropertyDescriptionList pdList = PropertyUtility.getPropertyDescriptionOutcome(itemSysKey);
- props = pdList.instanciate();
- // set Name prop or create if not present
- boolean foundName = false;
- for (Property prop : props.list) {
- if (prop.getName().equals("Name")) {
- foundName = true;
- prop.setValue(newName);
- }
- }
- if (!foundName) props.list.add(new Property("Name", newName, true));
- props.list.add( new Property("Creator", agent.getAgentName(), false));
-
- /* ITEM CREATION */
-
- // generate new entity key
- Logger.msg(6, "CreateItemFromDescription - Requesting new sysKey");
- ItemPath entityPath = Gateway.getNextKeyManager().generateNextEntityKey();
-
- // resolve the item factory
- Logger.msg(6, "CreateItemFromDescription - Resolving item factory");
-
- // create the Item object
- Logger.msg(3, "CreateItemFromDescription - Creating Item");
- CorbaServer factory = Gateway.getCorbaServer();
- if (factory == null) throw new AccessRightsException("This process cannot create new Items", "");
- TraceableEntity newItem = (TraceableEntity)factory.createEntity(entityPath);
- Gateway.getLookup().add(entityPath);
-
-
- // initialise it with its properties and workflow
-
- Logger.msg(3, "CreateItemFromDescription - Initializing Item");
-
- newItem.initialise(
- agent.getSysKey(),
- Gateway.getMarshaller().marshall(props),
- Gateway.getMarshaller().marshall(wfDef.instantiate()),
- Gateway.getMarshaller().marshall(colls)
- );
-
- // add its domain path
- Logger.msg(3, "CreateItemFromDescription - Creating "+context);
- context.setEntity(entityPath);
- Gateway.getLookup().add(context);
- return requestData;
- } catch (Exception e) {
- Logger.error(e);
- throw new InvalidDataException(e.getMessage(), "");
- }
-
- }
-}
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/PredefinedStepContainer.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/PredefinedStepContainer.java index 43cc8ca..81d70ce 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/PredefinedStepContainer.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/PredefinedStepContainer.java @@ -1,7 +1,7 @@ package com.c2kernel.lifecycle.instance.predefined;
import com.c2kernel.graph.model.GraphPoint;
import com.c2kernel.lifecycle.instance.CompositeActivity;
-public class PredefinedStepContainer extends CompositeActivity
+public abstract class PredefinedStepContainer extends CompositeActivity
{
protected int num = 0;
@@ -14,7 +14,6 @@ public class PredefinedStepContainer extends CompositeActivity }
public void createChildren()
{
- predInit("CreateItemFromDescription", "Create a new item using this item as its description", new CreateItemFromDescription());
predInit("AddDomainPath", "Adds a new path to this entity in the LDAP domain tree", new AddDomainPath());
predInit("RemoveDomainPath", "Removes an existing path to this Entity from the LDAP domain tree", new RemoveDomainPath());
predInit("ReplaceDomainWorkflow", "Replaces the domain CA with the supplied one. Used by the GUI to save new Wf layout", new ReplaceDomainWorkflow());
@@ -27,7 +26,6 @@ public class PredefinedStepContainer extends CompositeActivity predInit("ClearSlot", "Clears an aggregation member slot, given a slot no or entity key", new ClearSlot());
predInit("RemoveSlotFromCollection", "Removed the given slot from the aggregation", new RemoveSlotFromCollection());
predInit("AddMemberToCollection", "Creates a new member slot for the given item in a dependency, and assigns the item", new AddMemberToCollection());
- predInit("Erase", "Deletes all objects and domain paths for this item.", new Erase());
predInit("Import", "Imports an outcome into the Item, with a given schema and viewpoint", new Import());
}
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/RemoveDomainPath.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/RemoveDomainPath.java index 1ee5e8c..df1c44e 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/RemoveDomainPath.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/RemoveDomainPath.java @@ -11,11 +11,10 @@ package com.c2kernel.lifecycle.instance.predefined; import com.c2kernel.common.InvalidDataException;
-import com.c2kernel.common.ObjectCannotBeUpdated;
import com.c2kernel.common.ObjectNotFoundException;
import com.c2kernel.lookup.AgentPath;
import com.c2kernel.lookup.DomainPath;
-import com.c2kernel.lookup.Lookup;
+import com.c2kernel.lookup.LookupManager;
import com.c2kernel.process.Gateway;
import com.c2kernel.utils.Logger;
@@ -32,7 +31,7 @@ public class RemoveDomainPath extends PredefinedStep int transitionID, String requestData) throws InvalidDataException {
Logger.msg(8,"RemoveDomainPath::request()");
- Lookup lookupManager = Gateway.getLookup();
+
Logger.msg(1,"RemoveDomainPath::request() - Starting.");
@@ -49,10 +48,11 @@ public class RemoveDomainPath extends PredefinedStep throw new InvalidDataException("Domain path "+domainPath.toString()+" is a context.", "");
}
try {
+ LookupManager lookupManager = Gateway.getLookupManager();
lookupManager.delete(domainPath);
Logger.msg(8,"AddAlias::request() - context:" + domainPath.toString() + " DONE.");
return requestData;
- } catch (ObjectCannotBeUpdated ex) {
+ } catch (Exception ex) {
Logger.error(ex);
throw new InvalidDataException("Problem updating directory", "");
}
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/agent/AgentPredefinedStepContainer.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/agent/AgentPredefinedStepContainer.java new file mode 100644 index 0000000..2b9acbc --- /dev/null +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/agent/AgentPredefinedStepContainer.java @@ -0,0 +1,29 @@ +package com.c2kernel.lifecycle.instance.predefined.agent;
+
+import com.c2kernel.lifecycle.instance.predefined.PredefinedStepContainer;
+import com.c2kernel.lifecycle.instance.predefined.item.CreateItemFromDescription;
+
+
+/**************************************************************************
+ *
+ * $Revision: 1.2 $
+ * $Date: 2005/06/02 10:19:33 $
+ *
+ * Copyright (C) 2003 CERN - European Organization for Nuclear Research
+ * All rights reserved.
+ **************************************************************************/
+
+// public static final String codeRevision = "$Revision: 1.2 $ $Date: 2005/06/02 10:19:33 $ $Author: abranson $";
+public class AgentPredefinedStepContainer extends PredefinedStepContainer {
+
+
+ @Override
+ public void createChildren()
+ {
+ super.createChildren();
+ predInit("CreateItemFromDescription", "Create a new item using this item as its description", new CreateItemFromDescription());
+ predInit("RemoveAgent", "Deletes the Agent", new RemoveAgent());
+ predInit("SetAgentPassword", "Changes the Agent's password", new SetAgentPassword());
+ predInit("SetAgentRoles", "Sets the roles of the Agent", new SetAgentRoles());
+ }
+}
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/agent/CreateAgentFromDescription.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/agent/CreateAgentFromDescription.java new file mode 100644 index 0000000..f311dc1 --- /dev/null +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/agent/CreateAgentFromDescription.java @@ -0,0 +1,95 @@ +/**************************************************************************
+ * CreateItemFromDescription
+ *
+ * $Workfile$
+ * $Revision: 1.47 $
+ * $Date: 2005/10/13 08:13:58 $
+ *
+ * Copyright (C) 2001 CERN - European Organization for Nuclear Research
+ * All rights reserved.
+ **************************************************************************/
+
+package com.c2kernel.lifecycle.instance.predefined.agent;
+
+import com.c2kernel.common.AccessRightsException;
+import com.c2kernel.common.InvalidDataException;
+import com.c2kernel.common.ObjectAlreadyExistsException;
+import com.c2kernel.entity.CorbaServer;
+import com.c2kernel.entity.agent.ActiveEntity;
+import com.c2kernel.lifecycle.instance.predefined.item.CreateItemFromDescription;
+import com.c2kernel.lookup.AgentPath;
+import com.c2kernel.lookup.DomainPath;
+import com.c2kernel.process.Gateway;
+import com.c2kernel.utils.Logger;
+
+/**************************************************************************
+ *
+ * @author $Author: abranson $ $Date: 2005/10/13 08:13:58 $
+ * @version $Revision: 1.47 $
+ **************************************************************************/
+public class CreateAgentFromDescription extends CreateItemFromDescription
+{
+ public CreateAgentFromDescription()
+ {
+ super();
+ }
+
+ //requestdata is xmlstring
+ @Override
+ protected String runActivityLogic(AgentPath agent, int itemSysKey,
+ int transitionID, String requestData) throws InvalidDataException {
+
+ String[] input = getDataList(requestData);
+ String newName = input[0];
+ String domPath = input[1];
+ String wfDefName = null;
+ int wfDefVer = -1;
+ if (input.length > 2) // override wf
+ wfDefName = input[2];
+
+ Logger.msg(1, "CreateAgentFromDescription::request() - Starting.");
+
+ try {
+ // check if the path is already taken
+ DomainPath context = new DomainPath(new DomainPath(domPath), newName);
+ Logger.debug(8,"context "+context.getSysKey()+" "+context.getPath()+" "+context.getString());
+ if (context.getSysKey()!=-1)
+ throw new ObjectAlreadyExistsException("The agent name " +newName+ " exists already.", "");
+
+ // generate new entity key
+ Logger.msg(6, "CreateItemFromDescription - Requesting new sysKey");
+ AgentPath newAgentPath = Gateway.getNextKeyManager().generateNextAgentKey();
+
+ // resolve the item factory
+ Logger.msg(6, "CreateItemFromDescription - Resolving item factory");
+
+ // create the Item object
+ Logger.msg(3, "CreateItemFromDescription - Creating Item");
+ CorbaServer factory = Gateway.getCorbaServer();
+ if (factory == null) throw new AccessRightsException("This process cannot create new Items", "");
+ ActiveEntity newAgent = (ActiveEntity)factory.createEntity(newAgentPath);
+ Gateway.getLookupManager().add(newAgentPath);
+
+
+ // initialise it with its properties and workflow
+
+ Logger.msg(3, "CreateItemFromDescription - Initializing Item");
+
+ newAgent.initialise(
+ agent.getSysKey(),
+ Gateway.getMarshaller().marshall(getNewProperties(itemSysKey, newName, agent)),
+ Gateway.getMarshaller().marshall(getNewWorkflow(itemSysKey, wfDefName, wfDefVer)),
+ Gateway.getMarshaller().marshall(getNewCollections(itemSysKey))
+ );
+
+ // add its domain path
+ Logger.msg(3, "CreateItemFromDescription - Creating "+context);
+ context.setEntity(newAgentPath);
+ Gateway.getLookupManager().add(context);
+ return requestData;
+ } catch (Exception e) {
+ Logger.error(e);
+ throw new InvalidDataException(e.getMessage(), "");
+ }
+ }
+}
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/RemoveAgent.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/agent/RemoveAgent.java index 19641fe..0630f6c 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/RemoveAgent.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/agent/RemoveAgent.java @@ -1,10 +1,12 @@ -package com.c2kernel.lifecycle.instance.predefined.server;
+package com.c2kernel.lifecycle.instance.predefined.agent;
+import com.c2kernel.common.CannotManageException;
import com.c2kernel.common.InvalidDataException;
import com.c2kernel.common.ObjectCannotBeUpdated;
import com.c2kernel.common.ObjectNotFoundException;
import com.c2kernel.lifecycle.instance.predefined.PredefinedStep;
import com.c2kernel.lookup.AgentPath;
+import com.c2kernel.lookup.InvalidItemPathException;
import com.c2kernel.lookup.RolePath;
import com.c2kernel.persistency.ClusterStorageException;
import com.c2kernel.process.Gateway;
@@ -22,37 +24,42 @@ public class RemoveAgent extends PredefinedStep { Logger.msg(1, "RemoveAgent::request() - Starting.");
- String[] params = getDataList(requestData);
AgentPath targetAgent;
try {
- targetAgent = Gateway.getLookup().getAgentPath(params[0]);
- } catch (ObjectNotFoundException e) {
- throw new InvalidDataException("Agent "+params[0]+" not found", "");
+ targetAgent = new AgentPath(itemSysKey);
+ } catch (InvalidItemPathException ex) {
+ throw new InvalidDataException("Could not resolve syskey "+itemSysKey+" as an Agent.");
}
+ String agentName = targetAgent.getAgentName();
+
//remove from roles
for (RolePath role: targetAgent.getRoles()) {
try {
role.removeAgent(targetAgent);
} catch (ObjectCannotBeUpdated e) {
Logger.error(e);
- throw new InvalidDataException("Error removing "+params[0]+" from Role "+role.getName(), "");
+ throw new InvalidDataException("Error removing "+agentName+" from Role "+role.getName(), "");
} catch (ObjectNotFoundException e) {
Logger.error(e);
- throw new InvalidDataException("Tried to remove "+params[0]+" from Role "+role.getName()+" that doesn't exist.", "");
+ throw new InvalidDataException("Tried to remove "+agentName+" from Role "+role.getName()+" that doesn't exist.", "");
+ } catch (CannotManageException e) {
+ throw new InvalidDataException("Tried to alter roles in a non-server process.", "");
}
}
+
//clear out all storages
try {
Gateway.getStorage().removeCluster(targetAgent.getSysKey(), "", null);
} catch (ClusterStorageException e) {
Logger.error(e);
- throw new InvalidDataException("Error deleting storage for "+params[0], "");
+ throw new InvalidDataException("Error deleting storage for "+agentName, "");
}
+
//remove entity path
try {
- Gateway.getLookup().delete(targetAgent);
- } catch (ObjectCannotBeUpdated e) {
- throw new InvalidDataException("Error deleting AgentPath for "+params[0], "");
+ Gateway.getLookupManager().delete(targetAgent);
+ } catch (Exception e) {
+ throw new InvalidDataException("Error deleting AgentPath for "+agentName, "");
}
return requestData;
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/SetAgentPassword.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/agent/SetAgentPassword.java index 8a2863a..09fdefe 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/SetAgentPassword.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/agent/SetAgentPassword.java @@ -1,12 +1,14 @@ -package com.c2kernel.lifecycle.instance.predefined.server;
+package com.c2kernel.lifecycle.instance.predefined.agent;
import java.security.NoSuchAlgorithmException;
+import com.c2kernel.common.CannotManageException;
import com.c2kernel.common.InvalidDataException;
import com.c2kernel.common.ObjectCannotBeUpdated;
import com.c2kernel.common.ObjectNotFoundException;
import com.c2kernel.lifecycle.instance.predefined.PredefinedStep;
import com.c2kernel.lookup.AgentPath;
+import com.c2kernel.lookup.InvalidItemPathException;
import com.c2kernel.process.Gateway;
import com.c2kernel.utils.Logger;
@@ -22,27 +24,31 @@ public class SetAgentPassword extends PredefinedStep { Logger.msg(1, "SetAgentPassword::request() - Starting.");
- String[] params = getDataList(requestData);
- if (params.length!=2)
- throw new InvalidDataException("Requires 2 params: agent name and new password", "");
AgentPath targetAgent;
try {
- targetAgent = Gateway.getLookup().getAgentPath(params[0]);
- } catch (ObjectNotFoundException e) {
- throw new InvalidDataException("Agent "+params[0]+" not found", "");
+ targetAgent = new AgentPath(itemSysKey);
+ } catch (InvalidItemPathException ex) {
+ throw new InvalidDataException("Could not resolve syskey "+itemSysKey+" as an Agent.");
}
+ String agentName = targetAgent.getAgentName();
+
+ String[] params = getDataList(requestData);
+ if (params.length!=1)
+ throw new InvalidDataException("Requires 1 param: new password", "");
try {
- Gateway.getLookup().setAgentPassword(targetAgent, params[1]);
+ Gateway.getLookupManager().setAgentPassword(targetAgent, params[0]);
} catch (ObjectNotFoundException e) {
Logger.error(e);
- throw new InvalidDataException("Agent "+params[0]+" not found.", "");
+ throw new InvalidDataException("Agent "+agentName+" not found.", "");
} catch (ObjectCannotBeUpdated e) {
Logger.error(e);
throw new InvalidDataException("Error updating LDAP entry.", "");
} catch (NoSuchAlgorithmException e) {
Logger.error(e);
throw new InvalidDataException("Cryptographic libraries for password hashing not found.", "");
+ } catch (CannotManageException e) {
+ throw new InvalidDataException("Cannot set agent password in a non-server process.", "");
}
params[1] = "REDACTED"; // censor user's password from outcome
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/SetAgentRoles.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/agent/SetAgentRoles.java index 19c6bd8..8bcba30 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/SetAgentRoles.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/agent/SetAgentRoles.java @@ -1,4 +1,4 @@ -package com.c2kernel.lifecycle.instance.predefined.server;
+package com.c2kernel.lifecycle.instance.predefined.agent;
import java.util.ArrayList;
@@ -6,6 +6,7 @@ import com.c2kernel.common.InvalidDataException; import com.c2kernel.common.ObjectNotFoundException;
import com.c2kernel.lifecycle.instance.predefined.PredefinedStep;
import com.c2kernel.lookup.AgentPath;
+import com.c2kernel.lookup.InvalidItemPathException;
import com.c2kernel.lookup.RolePath;
import com.c2kernel.process.Gateway;
import com.c2kernel.utils.Logger;
@@ -25,20 +26,19 @@ public class SetAgentRoles extends PredefinedStep { String[] params = getDataList(requestData);
AgentPath targetAgent;
try {
- targetAgent = Gateway.getLookup().getAgentPath(params[0]);
- } catch (ObjectNotFoundException e) {
- throw new InvalidDataException("Agent "+params[0]+" not found", "");
+ targetAgent = new AgentPath(itemSysKey);
+ } catch (InvalidItemPathException ex) {
+ throw new InvalidDataException("Could not resolve syskey "+itemSysKey+" as an Agent.");
}
RolePath[] currentRoles = targetAgent.getRoles();
ArrayList<RolePath> requestedRoles = new ArrayList<RolePath>();
- if (params.length>1)
- for (int i=1; i<params.length; i++)
- try {
- requestedRoles.add(Gateway.getLookup().getRolePath(params[i]));
- } catch (ObjectNotFoundException e) {
- throw new InvalidDataException("Role "+params[i]+" not found", "");
- }
+ for (int i=0; i<params.length; i++)
+ try {
+ requestedRoles.add(Gateway.getLookup().getRolePath(params[i]));
+ } catch (ObjectNotFoundException e) {
+ throw new InvalidDataException("Role "+params[i]+" not found", "");
+ }
ArrayList<RolePath> rolesToRemove = new ArrayList<RolePath>();
for (RolePath existingRole : currentRoles) { //
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/item/CreateItemFromDescription.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/item/CreateItemFromDescription.java new file mode 100644 index 0000000..f63c188 --- /dev/null +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/item/CreateItemFromDescription.java @@ -0,0 +1,183 @@ +/**************************************************************************
+ * CreateItemFromDescription
+ *
+ * $Workfile$
+ * $Revision: 1.47 $
+ * $Date: 2005/10/13 08:13:58 $
+ *
+ * Copyright (C) 2001 CERN - European Organization for Nuclear Research
+ * All rights reserved.
+ **************************************************************************/
+
+package com.c2kernel.lifecycle.instance.predefined.item;
+
+import java.util.ArrayList;
+
+import com.c2kernel.collection.Collection;
+import com.c2kernel.collection.CollectionArrayList;
+import com.c2kernel.collection.CollectionDescription;
+import com.c2kernel.collection.CollectionMember;
+import com.c2kernel.common.AccessRightsException;
+import com.c2kernel.common.InvalidDataException;
+import com.c2kernel.common.ObjectAlreadyExistsException;
+import com.c2kernel.common.ObjectNotFoundException;
+import com.c2kernel.entity.CorbaServer;
+import com.c2kernel.entity.TraceableEntity;
+import com.c2kernel.lifecycle.CompositeActivityDef;
+import com.c2kernel.lifecycle.instance.CompositeActivity;
+import com.c2kernel.lifecycle.instance.predefined.PredefinedStep;
+import com.c2kernel.lookup.AgentPath;
+import com.c2kernel.lookup.DomainPath;
+import com.c2kernel.lookup.ItemPath;
+import com.c2kernel.persistency.ClusterStorage;
+import com.c2kernel.persistency.ClusterStorageException;
+import com.c2kernel.process.Gateway;
+import com.c2kernel.property.Property;
+import com.c2kernel.property.PropertyArrayList;
+import com.c2kernel.property.PropertyDescriptionList;
+import com.c2kernel.property.PropertyUtility;
+import com.c2kernel.utils.LocalObjectLoader;
+import com.c2kernel.utils.Logger;
+
+/**************************************************************************
+ *
+ * @author $Author: abranson $ $Date: 2005/10/13 08:13:58 $
+ * @version $Revision: 1.47 $
+ **************************************************************************/
+public class CreateItemFromDescription extends PredefinedStep
+{
+ public CreateItemFromDescription()
+ {
+ super();
+ }
+
+ //requestdata is xmlstring
+ @Override
+ protected String runActivityLogic(AgentPath agent, int itemSysKey,
+ int transitionID, String requestData) throws InvalidDataException {
+
+ String[] input = getDataList(requestData);
+ String newName = input[0];
+ String domPath = input[1];
+ String wfDefName = null;
+ int wfDefVer = -1;
+ if (input.length > 2) // override wf
+ wfDefName = input[2];
+
+ Logger.msg(1, "CreateItemFromDescription - Starting.");
+
+ try {
+ // check if the path is already taken
+ DomainPath context = new DomainPath(new DomainPath(domPath), newName);
+ Logger.debug(8,"context "+context.getSysKey()+" "+context.getPath()+" "+context.getString());
+ if (context.getSysKey()!=-1)
+ throw new ObjectAlreadyExistsException("The item name " +newName+ " exists already.", "");
+
+ // get init objects
+
+ /* ITEM CREATION */
+
+ // generate new entity key
+ Logger.msg(6, "CreateItemFromDescription - Requesting new sysKey");
+ ItemPath entityPath = Gateway.getNextKeyManager().generateNextEntityKey();
+
+ // resolve the item factory
+ Logger.msg(6, "CreateItemFromDescription - Resolving item factory");
+
+ // create the Item object
+ Logger.msg(3, "CreateItemFromDescription - Creating Item");
+ CorbaServer factory = Gateway.getCorbaServer();
+ if (factory == null) throw new AccessRightsException("This process cannot create new Items", "");
+ TraceableEntity newItem = (TraceableEntity)factory.createEntity(entityPath);
+ Gateway.getLookupManager().add(entityPath);
+
+
+ // initialise it with its properties and workflow
+
+ Logger.msg(3, "CreateItemFromDescription - Initializing Item");
+
+ newItem.initialise(
+ agent.getSysKey(),
+ Gateway.getMarshaller().marshall(getNewProperties(itemSysKey, newName, agent)),
+ Gateway.getMarshaller().marshall(getNewWorkflow(itemSysKey, wfDefName, wfDefVer)),
+ Gateway.getMarshaller().marshall(getNewCollections(itemSysKey))
+ );
+
+ // add its domain path
+ Logger.msg(3, "CreateItemFromDescription - Creating "+context);
+ context.setEntity(entityPath);
+ Gateway.getLookupManager().add(context);
+ return requestData;
+ } catch (Exception e) {
+ Logger.error(e);
+ throw new InvalidDataException(e.getMessage(), "");
+ }
+
+ }
+
+ protected PropertyArrayList getNewProperties(int itemSysKey, String newName, AgentPath agent) throws ObjectNotFoundException {
+ // copy properties -- intend to create from propdesc
+ PropertyDescriptionList pdList = PropertyUtility.getPropertyDescriptionOutcome(itemSysKey);
+ PropertyArrayList props = pdList.instanciate();
+ // set Name prop or create if not present
+ boolean foundName = false;
+ for (Property prop : props.list) {
+ if (prop.getName().equals("Name")) {
+ foundName = true;
+ prop.setValue(newName);
+ }
+ }
+ if (!foundName) props.list.add(new Property("Name", newName, true));
+ props.list.add( new Property("Creator", agent.getAgentName(), false));
+ return props;
+ }
+
+ protected CompositeActivity getNewWorkflow(int itemSysKey, String wfDefName, int wfDefVer) throws ClusterStorageException, ObjectNotFoundException, InvalidDataException {
+ // loop through collections, collecting instantiated descriptions and finding the default workflow def
+ String[] collNames = Gateway.getStorage().getClusterContents(itemSysKey, ClusterStorage.COLLECTION);
+ for (String collName : collNames) {
+ if (collName.equalsIgnoreCase("workflow") && wfDefName == null) {
+ Collection<? extends CollectionMember> thisCol = (Collection<? extends CollectionMember>)Gateway.getStorage().get(itemSysKey, ClusterStorage.COLLECTION+"/"+collName, null);
+ ArrayList<? extends CollectionMember> members = thisCol.getMembers().list;
+ // get the first member from the wf collection
+ CollectionMember wfMember = members.get(0);
+ wfDefName = wfMember.resolveItem().getName();
+ Object wfVerObj = wfMember.getProperties().get("Version");
+ try {
+ wfDefVer = Integer.parseInt(wfVerObj.toString());
+ } catch (NumberFormatException ex) {
+ throw new InvalidDataException("Invalid workflow version number: "+wfVerObj.toString(), "");
+ }
+ }
+ }
+
+ // load workflow def
+ if (wfDefName == null)
+ throw new InvalidDataException("No workflow given or defined", "");
+ if (wfDefVer == -1)
+ throw new InvalidDataException("No workflow def version given","");
+
+ try {
+ CompositeActivityDef wfDef = (CompositeActivityDef)LocalObjectLoader.getActDef(wfDefName, wfDefVer);
+ return (CompositeActivity)wfDef.instantiate();
+ } catch (ObjectNotFoundException ex) {
+ throw new InvalidDataException("Workflow def '"+wfDefName+"' item not found", "");
+ } catch (ClassCastException ex) {
+ throw new InvalidDataException("Activity def '"+wfDefName+"' was not Composite", "");
+ }
+ }
+
+ protected CollectionArrayList getNewCollections(int itemSysKey) throws ClusterStorageException, ObjectNotFoundException {
+ // loop through collections, collecting instantiated descriptions and finding the default workflow def
+ CollectionArrayList colls = new CollectionArrayList();
+ String[] collNames = Gateway.getStorage().getClusterContents(itemSysKey, ClusterStorage.COLLECTION);
+ for (String collName : collNames) {
+ Collection<? extends CollectionMember> thisCol = (Collection<? extends CollectionMember>)Gateway.getStorage().get(itemSysKey, ClusterStorage.COLLECTION+"/"+collName, null);
+ if (thisCol instanceof CollectionDescription) {
+ CollectionDescription<? extends CollectionMember> thisDesc = (CollectionDescription<? extends CollectionMember>)thisCol;
+ colls.put(thisDesc.newInstance());
+ }
+ }
+ return colls;
+ }
+}
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/Erase.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/item/Erase.java index 3c4a6a7..81eb329 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/Erase.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/item/Erase.java @@ -9,13 +9,14 @@ * All rights reserved.
**************************************************************************/
-package com.c2kernel.lifecycle.instance.predefined;
+package com.c2kernel.lifecycle.instance.predefined.item;
import java.util.Iterator;
import com.c2kernel.common.InvalidDataException;
+import com.c2kernel.lifecycle.instance.predefined.PredefinedStep;
import com.c2kernel.lookup.AgentPath;
import com.c2kernel.lookup.DomainPath;
import com.c2kernel.lookup.ItemPath;
@@ -52,14 +53,14 @@ public class Erase extends PredefinedStep DomainPath path = (DomainPath)domPaths.next();
// delete them
if (path.getSysKey() == itemSysKey)
- Gateway.getLookup().delete(path);
+ Gateway.getLookupManager().delete(path);
}
//clear out all storages
Gateway.getStorage().removeCluster(itemSysKey, "", null);
//remove entity path
- Gateway.getLookup().delete(new ItemPath(itemSysKey));
+ Gateway.getLookupManager().delete(new ItemPath(itemSysKey));
}
catch( Exception ex )
{
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/item/ItemPredefinedStepContainer.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/item/ItemPredefinedStepContainer.java new file mode 100644 index 0000000..4cb93e2 --- /dev/null +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/item/ItemPredefinedStepContainer.java @@ -0,0 +1,26 @@ +package com.c2kernel.lifecycle.instance.predefined.item;
+
+import com.c2kernel.lifecycle.instance.predefined.PredefinedStepContainer;
+
+
+/**************************************************************************
+ *
+ * $Revision: 1.2 $
+ * $Date: 2005/06/02 10:19:33 $
+ *
+ * Copyright (C) 2003 CERN - European Organization for Nuclear Research
+ * All rights reserved.
+ **************************************************************************/
+
+// public static final String codeRevision = "$Revision: 1.2 $ $Date: 2005/06/02 10:19:33 $ $Author: abranson $";
+public class ItemPredefinedStepContainer extends PredefinedStepContainer {
+
+
+ @Override
+ public void createChildren()
+ {
+ super.createChildren();
+ predInit("CreateItemFromDescription", "Create a new item using this item as its description", new CreateItemFromDescription());
+ predInit("Erase", "Deletes all objects and domain paths for this item.", new Erase());
+ }
+}
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/AddDomainContext.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/AddDomainContext.java index a931143..585f96f 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/AddDomainContext.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/AddDomainContext.java @@ -2,6 +2,7 @@ package com.c2kernel.lifecycle.instance.predefined.server; import java.util.Stack;
+import com.c2kernel.common.CannotManageException;
import com.c2kernel.common.InvalidDataException;
import com.c2kernel.common.ObjectAlreadyExistsException;
import com.c2kernel.common.ObjectCannotBeUpdated;
@@ -35,12 +36,14 @@ public class AddDomainContext extends PredefinedStep { while(!pathsToAdd.empty()) {
pathToAdd = pathsToAdd.pop();
try {
- Gateway.getLookup().add(pathToAdd);
+ Gateway.getLookupManager().add(pathToAdd);
} catch (ObjectAlreadyExistsException e) {
Logger.error("Context "+pathToAdd+" inconsistently exists.");
} catch (ObjectCannotBeUpdated e) {
Logger.error(e);
throw new InvalidDataException("Exception adding path "+pathToAdd+": "+e.getMessage(), "");
+ } catch (CannotManageException e) {
+ throw new InvalidDataException("Cannot alter directory in a non-server process", "");
}
}
return requestData;
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/RemoveDomainContext.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/RemoveDomainContext.java index a55f7dd..956166a 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/RemoveDomainContext.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/RemoveDomainContext.java @@ -1,5 +1,6 @@ package com.c2kernel.lifecycle.instance.predefined.server;
+import com.c2kernel.common.CannotManageException;
import com.c2kernel.common.InvalidDataException;
import com.c2kernel.common.ObjectCannotBeUpdated;
import com.c2kernel.common.ObjectNotFoundException;
@@ -31,10 +32,12 @@ public class RemoveDomainContext extends PredefinedStep { throw new InvalidDataException("Context "+pathToDelete+" is not empty. Cannot delete.", "");
try {
- Gateway.getLookup().delete(pathToDelete);
+ Gateway.getLookupManager().delete(pathToDelete);
} catch (ObjectCannotBeUpdated e) {
Logger.error(e);
throw new InvalidDataException("Exception deleting path"+pathToDelete+": "+e.getMessage(), "");
+ } catch (CannotManageException e) {
+ throw new InvalidDataException("Cannot alter directory in a non-server process", "");
}
return requestData;
}
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/ServerPredefinedStepContainer.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/ServerPredefinedStepContainer.java index 32cf7b2..412c468 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/ServerPredefinedStepContainer.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/ServerPredefinedStepContainer.java @@ -1,13 +1,8 @@ -package com.c2kernel.lifecycle.instance.predefined;
+package com.c2kernel.lifecycle.instance.predefined.server;
import com.c2kernel.graph.model.GraphPoint;
-import com.c2kernel.lifecycle.instance.predefined.server.AddDomainContext;
-import com.c2kernel.lifecycle.instance.predefined.server.CreateNewAgent;
-import com.c2kernel.lifecycle.instance.predefined.server.CreateNewItem;
-import com.c2kernel.lifecycle.instance.predefined.server.RemoveAgent;
-import com.c2kernel.lifecycle.instance.predefined.server.RemoveDomainContext;
-import com.c2kernel.lifecycle.instance.predefined.server.SetAgentPassword;
-import com.c2kernel.lifecycle.instance.predefined.server.SetAgentRoles;
+import com.c2kernel.lifecycle.instance.predefined.PredefinedStep;
+import com.c2kernel.lifecycle.instance.predefined.PredefinedStepContainer;
/**************************************************************************
*
@@ -30,10 +25,6 @@ public class ServerPredefinedStepContainer extends PredefinedStepContainer { serverPredInit("CreateNewAgent", "Creates a new Agent in this Server without description.", new CreateNewAgent());
serverPredInit("RemoveDomainContext", "Deletes an existing context in the domain tree, but only if empty", new RemoveDomainContext());
serverPredInit("AddDomainContext", "Creates an empty domain context in the tree", new AddDomainContext());
- //TODO: remove the following when agents have workflows
- serverPredInit("RemoveAgent", "Deletes the named Agent in this Server.", new RemoveAgent());
- serverPredInit("SetAgentPassword", "Changes the named Agent's password in this Server.", new SetAgentPassword());
- serverPredInit("SetAgentRoles", "Sets the roles of the named Agent.", new SetAgentRoles());
}
public void serverPredInit(String alias, String Description, PredefinedStep act)
|
