public void executeAsynch()

in taverna-wsdl-activity/src/main/java/org/apache/taverna/activities/wsdl/xmlsplitter/XMLOutputSplitterActivity.java [81:162]


	public void executeAsynch(final Map<String, T2Reference> data,
			final AsynchronousActivityCallback callback) {
		callback.requestRun(new Runnable() {

			public void run() {
				try {
					ReferenceService referenceService = callback.getContext()
							.getReferenceService();
					XMLOutputSplitter splitter = createSplitter();
					Map<String, String> inputMap = buildInputMap(data,
							referenceService);
					Map<String, Object> outputMap = splitter.execute(inputMap);
					callback.receiveResult(createOutputData(outputMap,
							referenceService), new int[0]);
				} catch (Exception e) {
					callback.fail("Error in XMLInputSplitterActivity", e);
				}
			}

			private Map<String, T2Reference> createOutputData(
					Map<String, Object> outputMap,
					ReferenceService referenceService)
					throws ReferenceServiceException {
				Map<String, T2Reference> result = new HashMap<String, T2Reference>();
				for (String outputName : outputMap.keySet()) {
					Object output = outputMap.get(outputName);
					// TODO check if the output can be anything other than
					// String or List
					if (output instanceof List) {
						result.put(outputName, referenceService.register(
								output, 1, true, callback.getContext()));
					} else {
						result.put(outputName, referenceService.register(
								output, 0, true, callback.getContext()));
					}
				}
				return result;
			}

			private XMLOutputSplitter createSplitter() {
				List<String> inputNames = new ArrayList<String>();
				List<String> outputTypes = new ArrayList<String>();
				List<String> outputNames = new ArrayList<String>();

				// FIXME: need to use the definition beans for now to get the
				// mimetype. Need to use the actual InputPort once the mimetype
				// becomes available again.
				if (configBean.has("outputPorts")) {
//					for (JsonNode outputPort : configBean.get("outputPorts")) {
                                        for (Iterator<JsonNode> iter = configBean.get("outputPorts").iterator();iter.hasNext();) {
                                                JsonNode outputPort = iter.next();
						outputNames.add(outputPort.get("name").textValue());
						outputTypes.add(outputPort.get("mimeType").textValue());
					}
				}

				for (InputPort outputPorts : getInputPorts()) {
					inputNames.add(outputPorts.getName());
				}

				return new XMLOutputSplitter(typeDescriptor, outputNames
						.toArray(new String[] {}), outputTypes
						.toArray(new String[] {}), inputNames
						.toArray(new String[] {}));
			}

			private Map<String, String> buildInputMap(
					Map<String, T2Reference> data,
					ReferenceService referenceService)
					throws ReferenceServiceException {
				Map<String, String> result = new HashMap<String, String>();
				for (String inputName : data.keySet()) {
					T2Reference id = data.get(inputName);
					result.put(inputName, (String) referenceService
							.renderIdentifier(id, String.class, callback
									.getContext()));

				}
				return result;
			}
		});
	}