protected Set parseDatalinks()

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