public void setInput()

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));
		}
	}