All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.toomuchcoding.uptodate.reporting.NewVersionProcessor.groovy Maven / Gradle / Ivy

package com.toomuchcoding.uptodate.reporting

import com.toomuchcoding.uptodate.LoggerProxy
import com.toomuchcoding.uptodate.UptodatePluginExtension
import com.toomuchcoding.uptodate.dependency.Dependency
import com.toomuchcoding.uptodate.dependency.DependencyGroupAndNameComparator
import groovy.util.logging.Slf4j

@Slf4j
class NewVersionProcessor {

    private static final boolean DO_NOT_MUTATE_ORIGINAL_COLLECTION = false
    private static final String NEW_VERSIONS_AVAILABLE = 'New versions available'
    private static final String NO_NEW_VERSIONS_AVAILABLE = 'No new versions available'

    public static final String NEW_VERSIONS_MESSAGE_HEADER = "${NEW_VERSIONS_AVAILABLE}:\n"
    public static final String NO_NEW_VERSIONS_MESSAGE = "${NO_NEW_VERSIONS_AVAILABLE}."

    private final LoggerProxy logger
    private final String projectName
    private final boolean reportProjectName
    private final BuildBreaker buildBreaker

    NewVersionProcessor(LoggerProxy logger, String projectName, UptodatePluginExtension uptodatePluginExtension) {
        this.logger = logger
        this.projectName = projectName
        this.reportProjectName = uptodatePluginExtension.reportProjectName
        this.buildBreaker = new BuildBreaker(uptodatePluginExtension.buildBreaker)
    }

    void reportUpdates(Set newVersions) {
        if (newVersions.isEmpty()) {
            logger.lifecycle(log, noNewVersionsMessage())
        } else {
            List sortedUpdates = newVersions.sort(DO_NOT_MUTATE_ORIGINAL_COLLECTION, new DependencyGroupAndNameComparator())
            logger.lifecycle(log, newVersionsReport(sortedUpdates))
            buildBreaker.breakTheBuildIfNecessary(sortedUpdates)
        }
    }

    private String newVersionsReport(newVersions) {
        return "${newVersionsMessageHeader()}${newVersions.join('\n')}"
    }

    private String newVersionsMessageHeader() {
        return reportProjectName ? "$NEW_VERSIONS_AVAILABLE for $projectName:\n" : NEW_VERSIONS_MESSAGE_HEADER
    }

    private String noNewVersionsMessage() {
        return reportProjectName ? "$NO_NEW_VERSIONS_AVAILABLE for $projectName." : NO_NEW_VERSIONS_MESSAGE
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy