diff options
| author | Andrew Branson <andrew.branson@cern.ch> | 2014-02-13 10:34:53 +0100 |
|---|---|---|
| committer | Andrew Branson <andrew.branson@cern.ch> | 2014-02-13 10:34:53 +0100 |
| commit | 37c8241f7e54694b255f366c8fc8b899a08b921f (patch) | |
| tree | 701239a62590c4b7d3d325f6ce8939b4d97f61bb /src/main/java/com/c2kernel/lifecycle/instance/predefined/WriteViewpoint.java | |
| parent | 0d4ecfc5d7bb0a606ab22a8c7f777f3f5bfd84b1 (diff) | |
New PredefinedStep: WriteViewpoint. Non-admin users may need to create
or replace named viewpoints during ordinary Item workflows. Previously,
AddC2KObject was used, but as that is now Admin only, a new step is
necessary to do this. Unlike the admin step, this checks that the target
Outcome and Event exist and are of the correct schema before the
Viewpoint is written. Fixes #154. Refs #152
Diffstat (limited to 'src/main/java/com/c2kernel/lifecycle/instance/predefined/WriteViewpoint.java')
| -rw-r--r-- | src/main/java/com/c2kernel/lifecycle/instance/predefined/WriteViewpoint.java | 67 |
1 files changed, 67 insertions, 0 deletions
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;
+ }
+
+}
|
