class CombinedCLIParser extends AbstractCLIParser {

    @Override
    public <T> List<LicenseInfoParsingResult> getLicenseInfos(Attachment attachment, User user, T context) throws TException {
        AttachmentContent attachmentContent = attachmentContentProvider.getAttachmentContent(attachment);
        InputStream attachmentStream = null;
        List<LicenseInfoParsingResult> parsingResults = new ArrayList<>();
        Map<String, Release> releasesByExternalId = prepareReleasesByExternalId(getCorrelationKey());

        try {
            attachmentStream = attachmentConnector.getAttachmentStream(attachmentContent, user, context);
            Document doc = getDocument(attachmentStream);

            Map<String, Set<String>> copyrightSetsByExternalId = getCopyrightSetsByExternalIdsMap(doc);
            Map<String, Set<LicenseNameWithText>> licenseNamesWithTextsByExternalId = getLicenseNamesWithTextsByExternalIdsMap(doc);

            Set<String> allExternalIds = Sets.union(copyrightSetsByExternalId.keySet(), licenseNamesWithTextsByExternalId.keySet());
            allExternalIds.forEach(extId -> {
                LicenseInfoParsingResult parsingResult = getLicenseInfoParsingResultForExternalId(attachmentContent, releasesByExternalId, copyrightSetsByExternalId, licenseNamesWithTextsByExternalId, extId);
                parsingResults.add(parsingResult);
            });
        } catch (ParserConfigurationException | IOException | XPathExpressionException | SAXException | SW360Exception e) {
            log.error(e);
            parsingResults.add(new LicenseInfoParsingResult()
                    .setStatus(LicenseInfoRequestStatus.FAILURE)
                    .setMessage("Error while parsing combined CLI file: " + e.toString()));
        } finally {
            closeQuietly(attachmentStream, log);
        }
        return parsingResults;
    }

    public  CombinedCLIParser(AttachmentConnector attachmentConnector, AttachmentContentProvider attachmentContentProvider, ComponentDatabaseHandler componentDatabaseHandler);

}