in taverna-scufl2-t2flow/src/main/java/org/apache/taverna/scufl2/translator/t2flow/T2FlowParser.java [877:924]
protected Set<DataLink> parseDatalinks(Datalinks origLinks)
throws ReaderException {
HashSet<DataLink> newLinks = new HashSet<>();
Map<ReceiverPort, AtomicInteger> mergeCounts = new HashMap<>();
for (org.apache.taverna.scufl2.xml.t2flow.jaxb.DataLink origLink : origLinks
.getDatalink()) {
try {
SenderPort senderPort = findSenderPort(parserState.get()
.getCurrentWorkflow(), origLink.getSource());
ReceiverPort receiverPort = findReceiverPort(parserState.get()
.getCurrentWorkflow(), origLink.getSink());
DataLink newLink = new DataLink(parserState.get()
.getCurrentWorkflow(), senderPort, receiverPort);
AtomicInteger mergeCount = mergeCounts.get(receiverPort);
if (origLink.getSink().getType().equals(MERGE)) {
if (mergeCount != null && mergeCount.intValue() < 1)
throw new ReaderException(
"Merged and non-merged links to port "
+ receiverPort);
if (mergeCount == null) {
mergeCount = new AtomicInteger(0);
mergeCounts.put(receiverPort, mergeCount);
}
newLink.setMergePosition(mergeCount.getAndIncrement());
} else {
if (mergeCount != null)
throw new ReaderException(
"More than one link to non-merged port "
+ receiverPort);
mergeCounts.put(receiverPort, new AtomicInteger(-1));
}
// FIXME: missing from t2flow and schema
//parseAnnotations(newLink, origLink.getAnnotations());
newLinks.add(newLink);
} catch (ReaderException ex) {
logger.log(WARNING, "Could not translate link:\n" + origLink,
ex);
if (isStrict())
throw ex;
continue;
}
}
return newLinks;
}