class SW360Updater {

    public void execute() {
        LOGGER.debug("{} has started.", SW360Updater.class.getName());
        Collection<Artifact> artifacts = getArtifactsFromCsvFile(configuration);

        Map<Artifact, SW360ClientException> exceptions = new HashMap<>();
        for (Artifact artifact : artifacts) {
            try {
                uploadReleaseWithClearingDocumentFromArtifact(artifact);
            } catch (SW360ClientException e) {
                exceptions.put(artifact, e);
            }
        }

        LOGGER.info("The SW360Updater was executed with the following configuration:");
        configuration.logConfiguration(LOGGER);
        LOGGER.info("Path for clearing documents: {}", clearingDocDir);

        if (!exceptions.isEmpty()) {
            StringBuilder builder = new StringBuilder("There have been some errors during update:");
            exceptions.forEach((key, value) -> {
                String packageURL = key.getMainCoordinate()
                        .map(coordinate ->
                                coordinate.getPackageURL().toString())
                        .orElse("UNKNOWN");

                builder.append(System.lineSeparator());
                builder.append(String.format("%s: %s", packageURL, value.getMessage()));
            });
            LOGGER.error(builder.toString());
            throw new SW360ClientException(builder.toString());
        }
    }

    public  SW360Updater(SW360UpdaterImpl updater, SW360Configuration configuration,
                        ClearingReportGenerator generator);

}