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

com.celum.dbtool.mojo.AbstractDbMojo Maven / Gradle / Ivy

/*****************************************************************************
 * Copyright 2012 celum Slovakia s r.o.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 *****************************************************************************/
package com.celum.dbtool.mojo;

import com.celum.dbtool.installer.*;
import com.celum.dbtool.step.DbStep;
import com.celum.dbtool.step.Version;
import com.celum.dbtool.step.VersionFactory;
import com.celum.nyx.DataSourceWrapper;
import org.apache.maven.model.Resource;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.project.MavenProject;

import javax.sql.DataSource;
import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
import java.sql.Connection;
import java.sql.DriverManager;

import java.sql.SQLException;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

/**
 * @author Zdenko Vrabel ([email protected])
 */
public abstract class AbstractDbMojo extends AbstractMojo implements DbEventListener
{
    /**
     * @parameter
     */
    protected String jdbcDriver;

    /**
     * @parameter
     */
    protected String jdbcUrl;

    /**
     * @parameter
     */
    protected String user;

    /**
     * @parameter
     */
    protected String password;

    /**
     * @parameter default-value="PATCH"
     */
    protected String patchTable;

    /**
     * @parameter
     */
    protected Map parameters;

    /**
     * @parameter
     */
    private String versionFactoryClass;


    /**
     * @parameter expression="${project}"
     * @required
     */
    private MavenProject project;

    /**
     * @parameter default-value="${project.build.resources}"
     */
    private Resource[] resources;


    /**
     * {@inheritDoc}
     */
	@Override
	public DbStep onProcessScript(DbStep script)
	{
		getLog().info("process step:" + script.getName());
		return script;
	}


    /**
     * {@inheritDoc}
     */
    @Override
    public void onError(DbStep script, Throwable e)
    {
        getLog().error("Error in step:" + script.getName(), e);
    }


    /**
     * {@inheritDoc}
     */
    @Override
    public void onFinishProcessing(DbStep script)
    {
        getLog().info("step:" + script.getName() + " finished OK");
    }


    /**
     * Method register the version factory by 'versionFactoryClass' parameter.
     * The default is VersionFactory.DEFAULT.
     */
    protected void registerVersionFactoryFromSettings() throws ClassNotFoundException, IllegalAccessException, InstantiationException
    {
        if (versionFactoryClass == null || versionFactoryClass.isEmpty()) {
            return;
        }

        Class vfClass = (Class) Class.forName(versionFactoryClass);
        Version.registerVersionFactory( (VersionFactory) vfClass.newInstance() );
    }


    /**
     * returns the datasource
     */
    protected DataSource getDataSource() throws ClassNotFoundException, SQLException
    {
        getLog().info("DB " + this.jdbcUrl + " with " + this.user + " via driver " + jdbcDriver);
        Class.forName(jdbcDriver);
        Connection connection = DriverManager.getConnection(this.jdbcUrl, this.user, this.password);
        return new DataSourceWrapper(connection);
    }


    /**
     * returns classloader which can load scripts from project for you.
     * @return
     */
    protected ClassLoader getClassLoaderWithCompiledClasses()
    {
        try {
            List urls = new LinkedList();

            //add compiled classes
            for (Object object : project.getCompileClasspathElements()) {
                String path = (String) object;
                urls.add(new File(path).toURL());
            }

            //add resources
            for (Resource r : resources) {
                urls.add(new URL("file:" + r.getDirectory()));
            }

            ClassLoader classLoader = new URLClassLoader(urls.toArray(new URL[] {}), this.getClass().getClassLoader());
            return classLoader;
        } catch (Exception e) {
            getLog().error(e);
            throw new IllegalStateException(e);
        }
    }


    protected Map getParameters()
    {
        Map params = new HashMap();
        params.putAll(this.parameters);
        params.put(DbVars.PATCHTABLE, this.patchTable);
        return params;
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy