Package com.carbonfive.db.migration.maven

Source Code of com.carbonfive.db.migration.maven.AbstractMigrationMojo

package com.carbonfive.db.migration.maven;

import com.carbonfive.db.jdbc.DatabaseType;
import com.carbonfive.db.jdbc.DatabaseUtils;
import com.carbonfive.db.migration.DriverManagerMigrationManager;
import com.carbonfive.db.migration.ResourceMigrationResolver;
import com.carbonfive.db.migration.SimpleVersionStrategy;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.project.MavenProject;
import org.springframework.util.StringUtils;

import static org.apache.commons.io.FilenameUtils.separatorsToUnix;
import static org.apache.commons.lang.StringUtils.*;

public abstract class AbstractMigrationMojo extends AbstractMojo
{
    /**
     * @parameter expression="${project}"
     * @required
     */
    protected MavenProject project;

    /** @parameter */
    private String url;
    /** @parameter */
    private String driver;
    /** @parameter */
    private String username;
    /** @parameter */
    private String password = "";

    /** @parameter */
    private String databaseType;

    /** @parameter */
    private String migrationsPath = "src/main/db/migrations/";

    /** @parameter */
    private String versionTable;
    /** @parameter */
    private String versionColumn;
    /** @parameter */
    private String appliedDateColumn;
    /** @parameter */
    private String durationColumn;
    /** @parameter */
    private String createSql;
    /** @parameter */
    private String dropSql;

    public abstract void executeMojo() throws MojoExecutionException;

    public final void execute() throws MojoExecutionException
    {
        if (isBlank(url) && isBlank(username)) { return; }

        password = isBlank(password) ? "" : password;

        if (isBlank(driver))
        {
            driver = DatabaseUtils.driverClass(url);
        }

        if (databaseType == null)
        {
            databaseType = DatabaseUtils.databaseType(url).toString();
        }

        validateConfiguration();

        executeMojo();
    }

    protected void validateConfiguration() throws MojoExecutionException
    {
        if (isBlank(driver))
        {
            throw new MojoExecutionException("No database driver. Specify one in the plugin configuration.");
        }

        if (isBlank(url))
        {
            throw new MojoExecutionException("No database url. Specify one in the plugin configuration.");
        }

        if (isBlank(username))
        {
            throw new MojoExecutionException("No database username. Specify one in the plugin configuration.");
        }

        try
        {
            DatabaseType.valueOf(databaseType);
        }
        catch (IllegalArgumentException e)
        {
            throw new MojoExecutionException(
                    "Database type of '" + databaseType + "' is invalid.  Valid values: " + StringUtils.arrayToDelimitedString(DatabaseType.values(), ", "));
        }

        try
        {
            Class.forName(driver);
        }
        catch (ClassNotFoundException e)
        {
            throw new MojoExecutionException("Can't load driver class " + driver + ". Be sure to include it as a plugin dependency.");
        }
    }

    public DriverManagerMigrationManager createMigrationManager()
    {
        DriverManagerMigrationManager manager = new DriverManagerMigrationManager(driver, url, username, password, DatabaseType.valueOf(databaseType));

        String path = migrationsPath;

        if (path.startsWith("file:"))
        {
            path = substring(path, 5);
        }
        if (!path.startsWith("classpath:") && !path.startsWith("\"") && !path.startsWith("/"))
        {
            path = project.getBasedir().getAbsolutePath() + "/" + path;
        }
        path = separatorsToUnix(path);

        manager.setMigrationResolver(new ResourceMigrationResolver(path));

        SimpleVersionStrategy strategy = new SimpleVersionStrategy();
        strategy.setVersionTable(defaultIfEmpty(versionTable, SimpleVersionStrategy.DEFAULT_VERSION_TABLE));
        strategy.setVersionColumn(defaultIfEmpty(versionColumn, SimpleVersionStrategy.DEFAULT_VERSION_COLUMN));
        strategy.setAppliedDateColumn(defaultIfEmpty(appliedDateColumn, SimpleVersionStrategy.DEFAULT_APPLIED_DATE_COLUMN));
        strategy.setDurationColumn(defaultIfEmpty(durationColumn, SimpleVersionStrategy.DEFAULT_DURATION_COLUMN));
        manager.setVersionStrategy(strategy);

        return manager;
    }

    public String getUrl()
    {
        return url;
    }

    public String getDriver()
    {
        return driver;
    }

    public String getUsername()
    {
        return username;
    }

    public String getPassword()
    {
        return password;
    }

    public String getDatabaseType()
    {
        return databaseType;
    }

    public String getMigrationsPath()
    {
        return migrationsPath;
    }

    public String getVersionTable()
    {
        return versionTable;
    }

    public String getVersionColumn()
    {
        return versionColumn;
    }

    public String getAppliedDateColumn()
    {
        return appliedDateColumn;
    }

    public String getDurationColumn()
    {
        return durationColumn;
    }

    public String getCreateSql()
    {
        return createSql;
    }

    public String getDropSql()
    {
        return dropSql;
    }
}
TOP

Related Classes of com.carbonfive.db.migration.maven.AbstractMigrationMojo

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.