summaryrefslogtreecommitdiff
path: root/src/main/java/com/c2kernel/lifecycle/instance/predefined/WriteViewpoint.java
diff options
context:
space:
mode:
authorAndrew Branson <andrew.branson@cern.ch>2014-02-13 10:34:53 +0100
committerAndrew Branson <andrew.branson@cern.ch>2014-02-13 10:34:53 +0100
commit37c8241f7e54694b255f366c8fc8b899a08b921f (patch)
tree701239a62590c4b7d3d325f6ce8939b4d97f61bb /src/main/java/com/c2kernel/lifecycle/instance/predefined/WriteViewpoint.java
parent0d4ecfc5d7bb0a606ab22a8c7f777f3f5bfd84b1 (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.java67
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;
+ }
+
+}