public void executeAsynch()

in taverna-wsdl-activity/src/main/java/org/apache/taverna/activities/wsdl/xmlsplitter/XMLInputSplitterActivity.java [86:147]


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

                        @Override
			public void run() {
				try {
					ReferenceService referenceService = callback.getContext().getReferenceService();
					XMLInputSplitter splitter = createSplitter();
					Map<String,Object> inputMap = buildInputMap(data,referenceService);
					Map<String,String> 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, String> outputMap,ReferenceService referenceService) throws ReferenceServiceException {
				Map<String,T2Reference> result = new HashMap<String, T2Reference>();
				for (String outputName : outputMap.keySet()) {
					String xmlOut = outputMap.get(outputName);
					result.put(outputName, referenceService.register(xmlOut, 0, true, callback.getContext()));
				}
				return result;
			}

			private XMLInputSplitter createSplitter() {
				List<String> inputNames = new ArrayList<String>();
				List<String> inputTypes = 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("inputPorts")) {
//                                      for (JsonNode inputPort : configBean.get("inputPorts")) {
                                        for (Iterator<JsonNode> iter = configBean.get("inputPorts").iterator();iter.hasNext();) {
                                                JsonNode inputPort = iter.next();
						inputNames.add(inputPort.get("name").textValue());
						inputTypes.add(inputPort.get("mimeType").textValue());
                                        }
				}
				
				for (OutputPort outputPorts : getOutputPorts()) {
					outputNames.add(outputPorts.getName());
				}
				
				return new XMLInputSplitter(typeDescriptor,inputNames.toArray(new String[]{}),inputTypes.toArray(new String[]{}),outputNames.toArray(new String[]{}));
			}
			
			private Map<String,Object> buildInputMap(Map<String, T2Reference> data,ReferenceService referenceService) throws ReferenceServiceException {
				Map<String,Object> result = new HashMap<String, Object>();
				for (String inputName : data.keySet()) {
					T2Reference id = data.get(inputName);
					result.put(inputName, referenceService.renderIdentifier(id,String.class, callback.getContext()));
					
				}
				return result;
			}
		});
		
	}