diff options
| author | Andrew Branson <andrew.branson@cern.ch> | 2013-02-04 22:06:09 +0100 |
|---|---|---|
| committer | Andrew Branson <andrew.branson@cern.ch> | 2013-02-04 22:06:09 +0100 |
| commit | fbb4c79a1f85c5e013fc7c626c830cf17dab3439 (patch) | |
| tree | 6b9e65c6da378b7673d694b9dfafbb812271b82d | |
| parent | 6f9de54853bfa39061879cf53456356962d99a87 (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.java | 43 |
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);
}
}
|
