/************************************************************************** * AddDomainPath * * Copyright (C) 2001 CERN - European Organization for Nuclear Research * All rights reserved. **************************************************************************/ package com.c2kernel.lifecycle.instance.predefined; import com.c2kernel.common.InvalidDataException; 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; /************************************************************************** * * $Revision: 1.21 $ * $Date: 2005/06/02 12:17:22 $ * * Params: Schemaname_version:Viewpoint (optional), Outcome, Timestamp (optional * * Copyright (C) 2003 CERN - European Organization for Nuclear Research * All rights reserved. **************************************************************************/ public class Import extends PredefinedStep { public Import() { super(); } //requestdata is xmlstring @Override protected String runActivityLogic(AgentPath agent, int itemSysKey, int transitionID, String requestData) throws InvalidDataException { Logger.msg(8,"Import::request()"); Logger.msg(1,"Import::request() - Starting."); String[] params = getDataList(requestData); int split1 = params[0].indexOf('_'); int split2 = params[0].indexOf(':'); requestData = params[1]; String schemaName = params[0].substring(0, split1); String viewpoint = null; int schemaVersion; if (split2 > -1) { schemaVersion = Integer.parseInt(params[0].substring(split1+1, split2)); viewpoint = params[0].substring(split2+1); } else schemaVersion = Integer.parseInt(params[0].substring(split1+1)); String timestamp; if (params.length == 3) timestamp = params[2]; else timestamp = Event.timeToString(Event.getGMT()); // write event, outcome and viewpoints to storage TransactionManager storage = Gateway.getStorage(); Object locker = getWf(); History hist = getWf().getHistory(); Event event = hist.addEvent(agent.getAgentName(), getCurrentAgentRole(), getName(), getPath(), getType(), schemaName, schemaVersion, getStateMachine().getName(), getStateMachine().getVersion(), getStateMachine().getTransition(transitionID), viewpoint, timestamp); try { storage.put(itemSysKey, new Outcome(event.getID(), requestData, schemaName, schemaVersion), this); storage.put(itemSysKey, new Viewpoint(itemSysKey, schemaName, viewpoint, schemaVersion, event.getID()), this); if (!"last".equals(viewpoint)) storage.put(itemSysKey, new Viewpoint(itemSysKey, schemaName, "last", schemaVersion, event.getID()), this); } catch (ClusterStorageException e) { Logger.error(e); storage.abort(locker); throw new InvalidDataException("Could not store imported outcome. Rolled back."); } storage.commit(this); return requestData; } }