diff options
Diffstat (limited to 'src/main/java/com/c2kernel/lifecycle/instance/predefined')
| -rw-r--r-- | src/main/java/com/c2kernel/lifecycle/instance/predefined/PredefinedStepContainer.java | 1 | ||||
| -rw-r--r-- | src/main/java/com/c2kernel/lifecycle/instance/predefined/WriteViewpoint.java | 67 |
2 files changed, 68 insertions, 0 deletions
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 b57dca4..8127113 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/PredefinedStepContainer.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/PredefinedStepContainer.java @@ -22,6 +22,7 @@ public class PredefinedStepContainer extends CompositeActivity predInit("AddC2KObject", "Adds or overwrites a C2Kernel object for this Item", new AddC2KObject());
predInit("RemoveC2KObject", "Removes the named C2Kernel object from this Item.", new RemoveC2KObject());
predInit("WriteProperty", "Writes a property to the Item", new WriteProperty());
+ predInit("WriteViewpoint", "Writes a viewpoint to the Item", new WriteViewpoint());
predInit("AddNewSlot", "Creates a new slot in the given aggregation, that holds instances of the item description of the given key", new AddNewSlot());
predInit("AssignItemToSlot", "Assigns the referenced entity to a pre-existing slot in an aggregation", new AssignItemToSlot());
predInit("ClearSlot", "Clears an aggregation member slot, given a slot no or entity key", new ClearSlot());
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/WriteViewpoint.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/WriteViewpoint.java new file mode 100644 index 0000000..741a9a2 --- /dev/null +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/WriteViewpoint.java @@ -0,0 +1,67 @@ +package com.c2kernel.lifecycle.instance.predefined;
+
+import com.c2kernel.common.InvalidDataException;
+import com.c2kernel.common.ObjectNotFoundException;
+import com.c2kernel.events.Event;
+import com.c2kernel.lookup.AgentPath;
+import com.c2kernel.persistency.ClusterStorage;
+import com.c2kernel.persistency.ClusterStorageException;
+import com.c2kernel.persistency.outcome.Viewpoint;
+import com.c2kernel.process.Gateway;
+import com.c2kernel.utils.Logger;
+
+public class WriteViewpoint extends PredefinedStep {
+
+ public WriteViewpoint() {
+ super();
+ }
+
+ @Override
+ protected String runActivityLogic(AgentPath agent, int itemSysKey,
+ int transitionID, String requestData) throws InvalidDataException {
+
+ String schemaName;
+ String viewName;
+ int evId;
+
+ Logger.msg(1, "WriteViewpoint::request() - Starting.");
+ String[] params = getDataList(requestData);
+
+ // outcometype, name and evId. Event and Outcome should be checked so schema version should be discovered.
+ if (params.length != 3)
+ throw new InvalidDataException("WriteViewpoint usage: [ schemaName, viewName, eventId ]", "");
+
+ schemaName = params[0];
+ viewName = params[1];
+
+ try {
+ evId = Integer.parseInt(params[2]);
+ } catch (NumberFormatException ex) {
+ throw new InvalidDataException("Parameter 3 (EventId) must be an integer", "");
+ }
+
+ // Find event
+
+ Event ev;
+ try {
+ ev = (Event)Gateway.getStorage().get(itemSysKey, ClusterStorage.HISTORY+"/"+evId, null);
+ } catch (ObjectNotFoundException e) {
+ Logger.error(e);
+ throw new InvalidDataException("Event "+evId+" not found", "");
+ } catch (ClusterStorageException e) {
+ Logger.error(e);
+ throw new InvalidDataException("Exception loading event", "");
+ }
+
+ // Write new viewpoint
+ Viewpoint newView = new Viewpoint(itemSysKey, schemaName, viewName, ev.getSchemaVersion(), evId);
+ try {
+ Gateway.getStorage().put(itemSysKey, newView, null);
+ } catch (ClusterStorageException e) {
+ Logger.error(e);
+ throw new InvalidDataException("Could not store new viewpoint", "");
+ }
+ return requestData;
+ }
+
+}
|
