summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Branson <andrew.branson@cern.ch>2013-02-04 22:06:09 +0100
committerAndrew Branson <andrew.branson@cern.ch>2013-02-04 22:06:09 +0100
commitfbb4c79a1f85c5e013fc7c626c830cf17dab3439 (patch)
tree6b9e65c6da378b7673d694b9dfafbb812271b82d
parent6f9de54853bfa39061879cf53456356962d99a87 (diff)
Write Import outcomes directly to storage.
Add optional timestamp override to Import. If missing, defaults to now.
-rw-r--r--src/main/java/com/c2kernel/lifecycle/instance/predefined/Import.java43
1 files changed, 34 insertions, 9 deletions
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/Import.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/Import.java
index 2f99937..949ee44 100644
--- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/Import.java
+++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/Import.java
@@ -10,7 +10,14 @@ package com.c2kernel.lifecycle.instance.predefined;
import com.c2kernel.common.AccessRightsException;
import com.c2kernel.common.InvalidDataException;
import com.c2kernel.common.InvalidTransitionException;
+import com.c2kernel.events.Event;
+import com.c2kernel.events.History;
import com.c2kernel.lookup.AgentPath;
+import com.c2kernel.persistency.ClusterStorageException;
+import com.c2kernel.persistency.TransactionManager;
+import com.c2kernel.persistency.outcome.Outcome;
+import com.c2kernel.persistency.outcome.Viewpoint;
+import com.c2kernel.process.Gateway;
import com.c2kernel.utils.Logger;
/**************************************************************************
@@ -18,7 +25,7 @@ import com.c2kernel.utils.Logger;
* $Revision: 1.21 $
* $Date: 2005/06/02 12:17:22 $
*
- * Params: Schemaname_version:Viewpoint (optional), Outcome
+ * Params: Schemaname_version:Viewpoint (optional), Outcome, Timestamp (optional
*
* Copyright (C) 2003 CERN - European Organization for Nuclear Research
* All rights reserved.
@@ -48,9 +55,11 @@ public class Import extends PredefinedStep
int split1 = params[0].indexOf('_');
int split2 = params[0].indexOf(':');
+
+ requestData = params[1];
String schemaName = params[0].substring(0, split1);
- String viewpoint = "last";
+ String viewpoint = null;
int schemaVersion;
if (split2 > -1) {
schemaVersion = Integer.parseInt(params[0].substring(split1+1, split2));
@@ -59,13 +68,29 @@ public class Import extends PredefinedStep
else
schemaVersion = Integer.parseInt(params[0].substring(split1+1));
- // set type & ver
- getProperties().put("SchemaType", schemaName);
- getProperties().put("SchemaVersion", String.valueOf(schemaVersion));
- getProperties().put("Viewpoint", viewpoint);
-
- requestData = params[1];
+ String timestamp;
+ if (params.length == 3)
+ timestamp = params[2];
+ else
+ timestamp = Event.timeToString(Event.getGMT());
+
+ // write event, outcome and viewpoints to storage
+ int syskey = getItemEntityPath().getSysKey();
+ TransactionManager storage = Gateway.getStorage();
+
+ History hist = new History(syskey, this);
+ Event event = hist.addEvent(agent.getAgentName(), getCurrentAgentRole(), transitionID, getName(), getPath(), getType(), viewpoint, getCurrentState(), timestamp);
- sendEventStoreOutcome(transitionID, requestData, agent);
+ try {
+ storage.put(syskey, new Outcome(event.getID(), requestData, schemaName, schemaVersion), this);
+ storage.put(syskey, new Viewpoint(syskey, schemaName, viewpoint, schemaVersion, event.getID()), this);
+ if (!"last".equals(viewpoint))
+ storage.put(syskey, new Viewpoint(syskey, schemaName, "last", schemaVersion, event.getID()), this);
+ } catch (ClusterStorageException e) {
+ Logger.error(e);
+ storage.abort(this);
+ throw new InvalidDataException("Could not store imported outcome. Rolled back.");
+ }
+ storage.commit(this);
}
}