/** * This file is part of the CRISTAL-iSE kernel. * Copyright (c) 2001-2014 The CRISTAL Consortium. All rights reserved. * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; with out even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * * http://www.fsf.org/licensing/licenses/lgpl.html */ package com.c2kernel.lifecycle.instance.predefined; import java.util.Arrays; import com.c2kernel.common.InvalidDataException; import com.c2kernel.events.Event; import com.c2kernel.events.History; import com.c2kernel.lookup.AgentPath; import com.c2kernel.lookup.ItemPath; 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, ItemPath item, int transitionID, String requestData) throws InvalidDataException { String[] params = getDataList(requestData); if (Logger.doLog(3)) Logger.msg(3, "Import: called by "+agent+" on "+item+" with parameters "+Arrays.toString(params)); int split1 = params[0].indexOf('_'); int split2 = params[0].indexOf(':'); if (split1 == -1) throw new InvalidDataException("Import: Invalid parameters "+Arrays.toString(params)); 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, getCurrentAgentRole(), getName(), getPath(), getType(), schemaName, schemaVersion, getStateMachine().getName(), getStateMachine().getVersion(), getStateMachine().getTransition(transitionID), viewpoint, timestamp); try { storage.put(item, new Outcome(event.getID(), requestData, schemaName, schemaVersion), locker); storage.put(item, new Viewpoint(item, schemaName, viewpoint, schemaVersion, event.getID()), locker); if (!"last".equals(viewpoint)) storage.put(item, new Viewpoint(item, schemaName, "last", schemaVersion, event.getID()), locker); } catch (ClusterStorageException e) { Logger.error(e); storage.abort(locker); throw new InvalidDataException("Import: Could not store imported outcome. Rolled back.", ""); } storage.commit(locker); return requestData; } }