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

com.simpligility.maven.provisioner.MavenRepositoryProvisioner Maven / Gradle / Ivy

/**
 * Copyright simpligility technologies inc. http://www.simpligility.com
 * Licensed under Eclipse Public License - v 1.0 http://www.eclipse.org/legal/epl-v10.html
 */
package com.simpligility.maven.provisioner;

import java.io.File;
import java.io.IOException;

import com.beust.jcommander.JCommander;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * MavenRepositoryProvisioner
 *
 * @author Manfred Moser - [email protected]
 */
public class MavenRepositoryProvisioner {
    private static final String DASH_LINE = "-----------------------------------";

    private static Configuration config;

    private static Logger logger = LoggerFactory.getLogger("MavenRepositoryProvisioner");

    static File cacheDirectory;

    public static void main(String[] args) {
        JCommander jcommander = null;
        Boolean validConfig = false;
        logger.info(DASH_LINE);
        logger.info(" Maven Repository Provisioner      ");
        logger.info(" simpligility technologies inc.    ");
        logger.info(" http://www.simpligility.com       ");
        logger.info(DASH_LINE);

        StringBuilder usage = new StringBuilder();
        config = new Configuration();
        try {
            jcommander = new JCommander(config);
            jcommander.getUsageFormatter().usage(usage);
            jcommander.parse(args);
            validConfig = true;
        } catch (Exception error) {
            logger.info(usage.toString());
            exitFailure("Problem parsing configuration.");
        }

        if (validConfig) {
            if (config.getHelp()) {
                exitWithHelpMessage(usage.toString());
            } else {
                logger.info(config.getConfigSummary());

                prepareCacheDirectory();

                ArtifactRetriever retriever = retrieveArtifacts();

                MavenRepositoryDeployer deployer = deployArtifacts();

                reportResults(retriever, deployer);
            }
        }
    }

    private static void prepareCacheDirectory() {
        cacheDirectory = new File(config.getCacheDirectory());
        logger.info(" Absolute path: " + cacheDirectory.getAbsolutePath());
        if (cacheDirectory.exists() && cacheDirectory.isDirectory()) {
            logger.info("Detected local cache directory '" + config.getCacheDirectory() + "'.");
            if (!config.hasArtifactsCoordinates()) {
                logger.info("No artifact coordinates specified - using cache directory as source.");
            } else {
                logger.info(
                        "Artifact coordinates specified " + "- removing stale cache directory from prior execution.");
                try {
                    FileUtils.deleteDirectory(cacheDirectory);
                    logger.info(config.getCacheDirectory() + " deleted.");
                } catch (IOException e) {
                    logger.info(config.getCacheDirectory() + " deletion failed");
                    exitFailure("Failed to delete stale cache directory.");
                }
                cacheDirectory = new File(config.getCacheDirectory());
                cacheDirectory.mkdirs();
            }
        } else {
            cacheDirectory = new File(config.getCacheDirectory());
            cacheDirectory.mkdirs();
        }
    }

    private static ArtifactRetriever retrieveArtifacts() {
        ArtifactRetriever retriever = null;
        if (config.hasArtifactsCoordinates()) {
            logger.info("Artifact retrieval starting.");
            retriever = new ArtifactRetriever(cacheDirectory);
            retriever.retrieve(
                    config.getArtifactCoordinates(),
                    config.getSourceUrl(),
                    config.getSourceUsername(),
                    config.getSourcePassword(),
                    config.getIncludeSources(),
                    config.getIncludeJavadoc(),
                    config.getIncludeProvidedScope(),
                    config.getIncludeTestScope(),
                    config.getIncludeRuntimeScope());

            logger.info("Artifact retrieval completed.");
        } else {
            logger.info("Artifact retrieval skipped. ");
        }
        return retriever;
    }

    private static MavenRepositoryDeployer deployArtifacts() {
        logger.info("Artifact deployment starting.");
        MavenRepositoryDeployer helper = new MavenRepositoryDeployer(cacheDirectory, config);
        helper.deployToRemote();
        logger.info("Artifact deployment completed.");
        return helper;
    }

    private static void reportResults(ArtifactRetriever retriever, MavenRepositoryDeployer deployer) {
        boolean provisioningSuccess;
        StringBuilder provisioningSuccessMessage = new StringBuilder();

        logger.info("Processing Completed.");
        StringBuilder summary = new StringBuilder();
        summary.append("\nProcessing Summary\n").append(DASH_LINE).append("\n");
        summary.append("Configuration:\n").append(config.getConfigSummary());
        if (retriever != null) {
            summary.append(retriever.listSucessfulRetrievals())
                    .append("\n")
                    .append(retriever.listFailedTransfers())
                    .append("\n");

            if (retriever.hasFailures()) {
                provisioningSuccess = false;
                provisioningSuccessMessage.append(retriever.getFailureMessage()).append("\n");
            } else {
                provisioningSuccess = true;
                provisioningSuccessMessage.append("Retrieval completed successfully.\n");
            }
        }

        summary.append(deployer.listSucessfulDeployments()).append("\n");
        summary.append(deployer.listFailedDeployments()).append("\n");
        summary.append(deployer.listSkippedDeployment()).append("\n");
        summary.append(deployer.listPotentialDeployment()).append("\n");

        if (deployer.hasFailure()) {
            provisioningSuccess = false;
            provisioningSuccessMessage.append(deployer.getFailureMessage()).append("\n");
        } else {
            provisioningSuccess = true;
            provisioningSuccessMessage.append("Deployment completed successfully.\n");
        }
        logger.info(summary.toString());

        if (provisioningSuccess) {
            exitSuccess(provisioningSuccessMessage.toString());
        } else {
            exitFailure(provisioningSuccessMessage.toString());
        }
    }

    private static void exitWithHelpMessage(String helpText) {
        logger.info(helpText);
        logger.info("\nIf you need to access the source repository via a proxy server,");
        logger.info("you can configure the standard Java proxy parameters http.proxyHost, ");
        logger.info("http.proxyPort, http.proxyUser and http.proxyPassword. More at ");
        logger.info("https://docs.oracle.com/javase/8/docs/api/java/net/doc-files/net-properties.html");
        exitFailure("Invalid configuration.");
    }

    private static void exitSuccess(String message) {
        logger.info("Exiting: SUCCESS \n" + message);
        System.exit(0);
    }

    private static void exitFailure(String message) {
        logger.info("Exiting: FAILURE \n" + message);
        System.exit(1);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy