protected void merge( VariantGraph into, Iterable<Token> witnessTokens, Map<Token, VariantGraphVertex> alignments) { Preconditions.checkArgument(!Iterables.isEmpty(witnessTokens), "Empty witness"); final Witness witness = Iterables.getFirst(witnessTokens, null).getWitness(); LOG.debug("{} + {}: Merge comparand into graph", into, witness); witnessTokenVertices = Maps.newHashMap(); VariantGraphVertex last = into.getStart(); final Set<Witness> witnessSet = Collections.singleton(witness); for (Token token : witnessTokens) { VariantGraphVertex matchingVertex = alignments.get(token); if (matchingVertex == null) { matchingVertex = into.add(token); } else { if (LOG.isTraceEnabled()) { LOG.trace("Adding matched {} to {}", token, matchingVertex); } matchingVertex.add(Collections.singleton(token)); } witnessTokenVertices.put(token, matchingVertex); into.connect(last, matchingVertex, witnessSet); last = matchingVertex; } into.connect(last, into.getEnd(), witnessSet); }