in taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/invocation/ToolInvocation.java [120:223]
public void setInput(String inputName, ReferenceService referenceService, T2Reference t2Reference) throws InvocationException {
if (t2Reference == null) {
throw new InvocationException("No input specified for " + inputName);
}
ScriptInputUser input = (ScriptInputUser) usecase.getInputs().get(inputName);
if (input.isList()) {
IdentifiedList<T2Reference> listOfReferences = (IdentifiedList<T2Reference>) referenceService
.getListService().getList(t2Reference);
if (!input.isConcatenate()) {
// this is a list input (not concatenated)
// so write every element to its own temporary file
// and create a filelist file
// we need to write the list elements to temporary files
ScriptInputUser listElementTemp = new ScriptInputUser();
listElementTemp.setBinary(input.isBinary());
listElementTemp.setTempFile(true);
String lineEndChar = "\n";
if (!input.isFile() && !input.isTempFile()) {
lineEndChar = " ";
}
String listFileContent = "";
String filenamesFileContent = "";
// create a list of all temp file names
for (T2Reference cur : listOfReferences) {
String tmp = setOneInput(referenceService, cur,
listElementTemp);
listFileContent += tmp + lineEndChar;
int ind = tmp.lastIndexOf('/');
if (ind == -1) {
ind = tmp.lastIndexOf('\\');
}
if (ind != -1) {
tmp = tmp.substring(ind + 1);
}
filenamesFileContent += tmp + lineEndChar;
}
// how do we want the listfile to be stored?
ScriptInputUser listFile = new ScriptInputUser();
listFile.setBinary(false); // since its a list file
listFile.setFile(input.isFile());
listFile.setTempFile(input.isTempFile());
listFile.setTag(input.getTag());
T2Reference listFileContentReference = referenceService
.register(listFileContent, 0, true, invocationContext);
tags.put(listFile.getTag(), setOneInput(referenceService,
listFileContentReference, listFile));
listFile.setTag(input.getTag() + "_NAMES");
T2Reference filenamesFileContentReference = referenceService
.register(filenamesFileContent, 0, true, null);
tags.put(listFile.getTag(), setOneInput(referenceService,
filenamesFileContentReference, listFile));
} else {
try {
// first, concatenate all data
if (input.isBinary()) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
BufferedWriter outputWriter = new BufferedWriter(
new OutputStreamWriter(outputStream));
for (T2Reference cur : listOfReferences) {
InputStreamReader inputReader = new InputStreamReader(
getAsStream(referenceService, cur));
IOUtils.copyLarge(inputReader, outputWriter);
inputReader.close();
}
outputWriter.close();
T2Reference binaryReference = referenceService
.register(outputStream.toByteArray(), 0, true,
invocationContext);
tags.put(input.getTag(), setOneInput(referenceService,
binaryReference, input));
} else {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
BufferedWriter outputWriter = new BufferedWriter(
new OutputStreamWriter(outputStream));
for (T2Reference cur : listOfReferences) {
InputStreamReader inputReader = new InputStreamReader(
getAsStream(referenceService, cur));
IOUtils.copyLarge(inputReader, outputWriter);
outputWriter.write(" ");
inputReader.close();
}
outputWriter.close();
T2Reference binaryReference = referenceService
.register(outputStream.toByteArray(), 0, true,
invocationContext);
tags.put(input.getTag(), setOneInput(referenceService,
binaryReference, input));
}
} catch (IOException e) {
throw new InvocationException(e);
}
}
} else {
tags.put(input.getTag(), setOneInput(referenceService, t2Reference,
input));
}
}