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