Package javango.mojo

Source Code of javango.mojo.ResetDbMojo

package javango.mojo;

import java.io.File;
import java.io.FileInputStream;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.List;
import java.util.ArrayList;
import java.util.Properties;

import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.project.MavenProject;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

/**
* Reset the database by dropping all tables and then recreating them.
*
* @goal resetdb
* @requiresDependencyResolution runtime
* @execute phase="compile"
* @description Runs the drop and create sqls against the database
*/
public class ResetDbMojo extends AbstractMojo
{
 
  /**
   * <i>Maven Internal</i>: Project to interact with.
   *
   * @parameter expression="${project}"
   * @required
   * @readonly
   * @noinspection UnusedDeclaration
   */
  private MavenProject project;
 
  /**
     * The hibernate.properties file
     *
     * @parameter expression="${project.build.outputDirectory}/hibernate.properties"
     * @required
     *
     */
    private File hibernateProperties;
   
    /**
     * The hibernate.xml file
     *
     * @parameter expression="${project.build.outputDirectory}/hibernate.cfg.xml"
     * @required
     *
     */
    private File hibernateCfgXml;

   
    /**
     * @see org.apache.maven.plugin.Mojo#execute()
     */
    public void execute() throws MojoExecutionException, MojoFailureException
    {
      Thread currentThread = Thread.currentThread();
      ClassLoader oldClassLoader = currentThread.getContextClassLoader();

      try
      {
        currentThread.setContextClassLoader( getClassLoader() );
         doExecute();
      }
      finally
      {
        currentThread.setContextClassLoader( oldClassLoader );
      }
    }
   
    public void doExecute() throws MojoExecutionException
    {
      try {
        Properties props = new Properties();
        props.load(new FileInputStream(hibernateProperties));
        Configuration cfg = new AnnotationConfiguration().configure(hibernateCfgXml);
        cfg.setProperties(props);
            getLog().info("Dropping all database tables.");
      new SchemaExport(cfg).drop(false, true);
      getLog().info("Done,  creating all database tables.");
      new SchemaExport(cfg).create(false, true);
      getLog().info("Done.");
      } catch (Exception e) {
        throw new MojoExecutionException(e.getMessage());
      }
    }

    /**
     * Returns the an isolated classloader.
     *
     * @return ClassLoader
     * @noinspection unchecked
     */
    private ClassLoader getClassLoader()
    {
      try
      {
        List classpathElements = new ArrayList();
        classpathElements.add( project.getBuild().getOutputDirectory() );
        URL urls[] = new URL[classpathElements.size()];
        for ( int i = 0; i < classpathElements.size(); ++i )
        {
          urls[i] = new File( (String) classpathElements.get( i ) ).toURL();
          System.out.println(urls[i].toString());
        }
        return new URLClassLoader( urls, this.getClass().getClassLoader() );
      }
      catch ( Exception e )
      {
        getLog().debug( "Couldn't get the classloader." );
        return this.getClass().getClassLoader();
      }
    }
}
TOP

Related Classes of javango.mojo.ResetDbMojo

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.