protected IConverter nextConverter(DocumentType sourceFormat, DocumentType targetFormat) { List<IConverter> supportingConverters = new ArrayList<IConverter>(converters.size()); for (IConverter converter : converters) { Set<DocumentType> documentTypes = converter.getSupportedConversions().get(sourceFormat); if (documentTypes != null && documentTypes.contains(targetFormat)) { supportingConverters.add(converter); } } if (supportingConverters.isEmpty()) { LOGGER.trace("No converter available for conversion of {} to {}", sourceFormat, targetFormat); return new ImpossibleConverter(); } IConverter converter = selectionStrategy.select(supportingConverters); LOGGER.trace("Selected {} for conversion of {} to {}", converter, sourceFormat, targetFormat); return new FailureAwareConverter(converter, this); }