package org.codehaus.mojo.hibernate3.exporter; /* * Copyright 2005 Johann Reyes. * * 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. */ import org.apache.maven.plugin.MojoExecutionException; import org.codehaus.mojo.hibernate3.HibernateExporterMojo; import org.codehaus.mojo.hibernate3.HibernateUtils; import org.hibernate.tool.hbm2x.Exporter; import org.hibernate.tool.hbm2ddl.SchemaUpdate; import org.hibernate.tool.hbm2ddl.SchemaExport; import org.hibernate.cfg.Configuration; import java.util.Iterator; import java.io.File; /** * Generates database schema. * * @author <a href="mailto:jreyes@hiberforum.org">Johann Reyes</a> * @version $Id$ * @goal hbm2ddl * @execute phase="process-resources" */ public class Hbm2DDLExporterMojo extends HibernateExporterMojo { /** * Default constructor. */ public Hbm2DDLExporterMojo() { addDefaultComponent( "target/hibernate3/sql", "configuration", false ); addDefaultComponent( "target/hibernate3/sql", "annotationconfiguration", true ); } // --------------------- Interface ExporterMojo --------------------- /** * Returns <b>hbm2ddl</b>. * * @return String goal's name */ public String getName() { return "hbm2ddl"; } /** * This method is not to be used. * * @return throws IllegalStateException */ protected Exporter createExporter() { throw new IllegalStateException( "Should not call create exporter on hbm2ddl" ); } /** * Overrides the default implementation of executing this goal. * * @throws MojoExecutionException if there is an error executing the goal */ protected void doExecute() throws MojoExecutionException { boolean scriptToConsole = getComponentProperty( "console", true ); boolean exportToDatabase = getComponentProperty( "export", true ); boolean haltOnError = getComponentProperty( "haltonerror", false ); boolean drop = getComponentProperty( "drop", false ); boolean create = getComponentProperty( "create", true ); String implementation = getComponentProperty( "implementation", getComponent().getImplementation() ); Configuration configuration = getComponentConfiguration( implementation ).getConfiguration( this ); if ( getComponentProperty( "update", false ) ) { SchemaUpdate update = new SchemaUpdate( configuration ); update.execute( scriptToConsole, exportToDatabase ); } else { SchemaExport export = new SchemaExport( configuration ); export.setDelimiter( getComponentProperty( "delimiter", ";" ) ); export.setHaltOnError( haltOnError ); export.setFormat( getComponentProperty( "format", false ) ); String outputFilename = getComponentProperty( "outputfilename" ); if ( outputFilename != null ) { File outputFile = HibernateUtils.prepareFile( new File( getProject().getBasedir(), getComponent().getOutputDirectory() ), outputFilename, "outputfilename" ); export.setOutputFile( outputFile.toString() ); } if ( drop && create ) { export.create( scriptToConsole, exportToDatabase ); } else { export.execute( scriptToConsole, exportToDatabase, drop, create ); } if ( export.getExceptions().size() > 0 ) { Iterator iterator = export.getExceptions().iterator(); int cnt = 1; getLog().warn( export.getExceptions().size() + " errors occurred while performing <hbm2ddl>." ); while ( iterator.hasNext() ) { getLog().error( "Error #" + cnt + ": " + iterator.next().toString() ); } if ( haltOnError ) { throw new MojoExecutionException( "Errors while performing <hbm2ddl>" ); } } } } }