blob: 1df05c29027b11ed059c711d26cd5f4253d8791c [file] [log] [blame]
/*******************************************************************************
* Copyright (C) 2007 The University of Manchester
*
* Modifications to the initial code base are copyright of their
* respective authors, or their employers as appropriate.
*
* This program 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 2.1 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without 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 program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
******************************************************************************/
package net.sf.taverna.t2.commandline.data;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import java.util.Map;
import uk.org.taverna.databundle.DataBundles;
/**
* Handles all recording of results as they are received by the {@link CommandLineResultListener} or
* when the workflow enactment has completed.
* This includes saving as a Baclava Document, or storing individual results.
*
* @author Stuart Owen
* @see BaclavaHandler
* @see CommandLineResultListener
*/
public class SaveResultsHandler {
private final File outputDirectory;
public SaveResultsHandler(File rootOutputDir) {
this.outputDirectory = rootOutputDir;
}
/**
* Given the Data on an output port, saves the data on a disk in the
* output directory.
*
* @param portName
* @param data
* @throws IOException
*/
public void saveResultsForPort(String portName, Path data) throws IOException {
if (DataBundles.isList(data)) {
Path outputPath = outputDirectory.toPath().resolve(portName);
Files.createDirectories(outputPath);
saveList(DataBundles.getList(data), outputPath);
} else if (DataBundles.isError(data)) {
Files.copy(data, outputDirectory.toPath().resolve(portName + ".error"));
} else {
Files.copy(data, outputDirectory.toPath().resolve(portName));
}
}
private void saveList(List<Path> list, Path destination) throws IOException {
int index = 1;
for (Path data : list) {
if (data != null) {
if (DataBundles.isList(data)) {
Path outputPath = destination.resolve(String.valueOf(index));
Files.createDirectories(outputPath);
saveList(DataBundles.getList(data), outputPath);
} else if (DataBundles.isError(data)) {
Files.copy(data, destination.resolve(String.valueOf(index) + ".error"));
} else {
Files.copy(data, destination.resolve(String.valueOf(index)));
}
}
index++;
}
}
}