summaryrefslogtreecommitdiff
path: root/src/main/java/com/c2kernel/lifecycle/instance/predefined/RemoveSlotFromCollection.java
diff options
context:
space:
mode:
authorAndrew Branson <andrew.branson@cern.ch>2014-09-09 12:13:21 +0200
committerAndrew Branson <andrew.branson@cern.ch>2014-09-09 12:13:21 +0200
commitda731d2bb81666b9c697d9099da632e7dfcdc0f7 (patch)
tree567693c3c48f3d15ecbb2dac4f9db03bb6e58c72 /src/main/java/com/c2kernel/lifecycle/instance/predefined/RemoveSlotFromCollection.java
parentae1e79e33fd30e3d8bcedbef8891a14a048276d7 (diff)
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.
Diffstat (limited to 'src/main/java/com/c2kernel/lifecycle/instance/predefined/RemoveSlotFromCollection.java')
-rw-r--r--src/main/java/com/c2kernel/lifecycle/instance/predefined/RemoveSlotFromCollection.java53
1 files changed, 36 insertions, 17 deletions
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/RemoveSlotFromCollection.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/RemoveSlotFromCollection.java
index 38638cd..726078b 100644
--- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/RemoveSlotFromCollection.java
+++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/RemoveSlotFromCollection.java
@@ -12,12 +12,16 @@
package com.c2kernel.lifecycle.instance.predefined;
+import java.util.Arrays;
+import java.util.UUID;
+
import com.c2kernel.collection.Collection;
import com.c2kernel.collection.CollectionMember;
import com.c2kernel.collection.MembershipException;
import com.c2kernel.common.InvalidDataException;
import com.c2kernel.common.ObjectNotFoundException;
import com.c2kernel.lookup.AgentPath;
+import com.c2kernel.lookup.ItemPath;
import com.c2kernel.persistency.ClusterStorage;
import com.c2kernel.persistency.ClusterStorageException;
import com.c2kernel.process.Gateway;
@@ -46,42 +50,57 @@ public class RemoveSlotFromCollection extends PredefinedStep
* 2 - target entity key
*/
@Override
- protected String runActivityLogic(AgentPath agent, int itemSysKey,
+ protected String runActivityLogic(AgentPath agent, ItemPath item,
int transitionID, String requestData) throws InvalidDataException {
String collName;
- int slotNo;
- int sysKey = -1;
+ int slotNo = -1;
+ ItemPath currentChild = null;
Collection<? extends CollectionMember> coll;
- Logger.msg(1, "RemoveSlotFromCollection::request() - Starting.");
-
// extract parameters
+ String[] params = getDataList(requestData);
+ if (Logger.doLog(3)) Logger.msg(3, "RemoveSlotFromCollection: called by "+agent+" on "+item+" with parameters "+Arrays.toString(params));
+
try {
- String[] params = getDataList(requestData);
collName = params[0];
- slotNo = params[1].length()>0?Integer.parseInt(params[1]):-1;
- if (params.length>2) sysKey = params[2].length()>0?Integer.parseInt(params[2]):-1;
+ if (params.length>1 && params[1].length()>0) slotNo = Integer.parseInt(params[1]);
+ if (params.length>2 && params[2].length()>0) currentChild = new ItemPath(UUID.fromString(params[2]));
} catch (Exception e) {
- throw new InvalidDataException("Invalid parameters", "");
+ throw new InvalidDataException("RemoveSlotFromCollection: Invalid parameters "+Arrays.toString(params), "");
}
- if (slotNo == -1 && sysKey == -1)
- throw new InvalidDataException("Must give either slot number or entity key", "");
+ if (slotNo == -1 && currentChild == null)
+ throw new InvalidDataException("RemoveSlotFromCollection: Must give either slot number or entity key", "");
// load collection
try {
- coll = (Collection<? extends CollectionMember>)Gateway.getStorage().get(itemSysKey, ClusterStorage.COLLECTION+"/"+collName, null);
+ coll = (Collection<? extends CollectionMember>)Gateway.getStorage().get(item, ClusterStorage.COLLECTION+"/"+collName, null);
} catch (ObjectNotFoundException ex) {
- throw new InvalidDataException("Collection '"+collName+"' not found in this Item", "");
+ throw new InvalidDataException("RemoveSlotFromCollection: Collection '"+collName+"' not found in this Item", "");
} catch (ClusterStorageException ex) {
Logger.error(ex);
- throw new InvalidDataException("Error loading collection '\"+collName+\"': "+ex.getMessage(), "");
+ throw new InvalidDataException("RemoveSlotFromCollection: Error loading collection '\"+collName+\"': "+ex.getMessage(), "");
}
+ // check the slot is there if it's given by id
+ CollectionMember slot = null;
+ if (slotNo > -1) {
+ try {
+ slot = coll.getMember(slotNo);
+ } catch (ObjectNotFoundException e) {
+ throw new InvalidDataException("RemoveSlotFromCollection: Slot "+slotNo+" not found in this collection", "");
+ }
+ }
+
+ // if both parameters are supplied, check the given item is actually in that slot
+ if (slot != null && !slot.getItemPath().equals(currentChild)) {
+ throw new InvalidDataException("RemoveSlotFromCollection: Item "+currentChild+" was not in slot "+slotNo, "");
+ }
+
if (slotNo == -1) { // find slot from entity key
for (CollectionMember member : coll.getMembers().list) {
- if (member.getSystemKey() == sysKey) {
+ if (member.getItemPath().equals(currentChild)) {
slotNo = member.getID();
break;
}
@@ -100,12 +119,12 @@ public class RemoveSlotFromCollection extends PredefinedStep
// Store the collection
try {
- Gateway.getStorage().put(itemSysKey, coll, null);
+ Gateway.getStorage().put(item, coll, null);
} catch (ClusterStorageException e) {
Logger.error(e);
throw new InvalidDataException("Error storing collection", "");
}
- Logger.msg(1, "RemoveSlotFromCollection::request() - DONE.");
+
return requestData;
}