X-Git-Url: http://juplo.de/gitweb/?p=hibernate4-maven-plugin;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Fplugins%2Fhibernate%2FDropMojo.java;h=beb3bfd19554331076ab290f2f4d18ed7e8b259c;hp=dd40387c9ff918cd180d66ac3b2176c01cae0ec6;hb=bb6069ff5e565f522a7699225d950321dde667d1;hpb=ee7f6da0225efc14d89fab58d88a45c98823399e diff --git a/src/main/java/de/juplo/plugins/hibernate/DropMojo.java b/src/main/java/de/juplo/plugins/hibernate/DropMojo.java index dd40387c..beb3bfd1 100644 --- a/src/main/java/de/juplo/plugins/hibernate/DropMojo.java +++ b/src/main/java/de/juplo/plugins/hibernate/DropMojo.java @@ -16,22 +16,29 @@ package de.juplo.plugins.hibernate; * limitations under the License. */ +import java.io.File; +import java.security.NoSuchAlgorithmException; +import java.util.EnumSet; import java.util.Map; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import org.hibernate.boot.spi.MetadataImplementor; +import org.hibernate.cfg.AvailableSettings; +import org.hibernate.engine.config.spi.ConfigurationService; import org.hibernate.service.ServiceRegistry; -import org.hibernate.tool.schema.SourceType; +import org.hibernate.tool.schema.TargetType; +import org.hibernate.tool.schema.internal.ExceptionHandlerCollectingImpl; +import org.hibernate.tool.schema.internal.exec.ScriptTargetOutputToFile; import org.hibernate.tool.schema.spi.ExecutionOptions; import org.hibernate.tool.schema.spi.SchemaManagementTool; -import org.hibernate.tool.schema.spi.ScriptSourceInput; -import org.hibernate.tool.schema.spi.SourceDescriptor; +import org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator; +import org.hibernate.tool.schema.spi.ScriptTargetOutput; import org.hibernate.tool.schema.spi.TargetDescriptor; /** - * Goal which extracts the hibernate-mapping-configuration and - * exports an according SQL-database-schema. + * Generate/Execute SQL to drop all tables of a database-schema that represents + * the configured mappings. * * @goal drop * @phase process-classes @@ -59,40 +66,65 @@ public class DropMojo extends AbstractSchemaMojo MojoFailureException, MojoExecutionException { - super.execute(outputFile); + try + { + super.execute(new MD5ModificationTracker(buildDirectory, outputFile, getLog())); + } + catch (NoSuchAlgorithmException e) + { + throw new MojoFailureException("Digest-Algorithm MD5 is missing!", e); + } } @Override - void build( - MetadataImplementor metadata, - ExecutionOptions options, - TargetDescriptor target - ) + ExceptionHandlerCollectingImpl build(final MetadataImplementor metadata) throws MojoExecutionException, MojoFailureException { - ServiceRegistry service = + final ServiceRegistry registry = metadata.getMetadataBuildingOptions().getServiceRegistry(); - SchemaManagementTool tool = service.getService(SchemaManagementTool.class); + final Map settings = + registry.getService(ConfigurationService.class).getSettings(); + SchemaManagementTool tool = registry.getService(SchemaManagementTool.class); - Map config = options.getConfigurationValues(); - SourceDescriptor source = new SourceDescriptor() + final EnumSet targetTypes = EnumSet.of(TargetType.SCRIPT); + if (Boolean.parseBoolean(settings.get(EXECUTE).toString())) + targetTypes.add(TargetType.DATABASE); + + TargetDescriptor target = new TargetDescriptor() { - @Override - public SourceType getSourceType() + @Override + public EnumSet getTargetTypes() { - return SourceType.METADATA; + return targetTypes; } @Override - public ScriptSourceInput getScriptSourceInput() + public ScriptTargetOutput getScriptTargetOutput() { - return null; + String charset = + (String)settings.get(AvailableSettings.HBM2DDL_CHARSET_NAME); + return new ScriptTargetOutputToFile(new File(outputFile), charset); } }; - tool.getSchemaDropper(config).doDrop(metadata, options, source, target); + ExceptionHandlerCollectingImpl handler = + new ExceptionHandlerCollectingImpl(); + + ExecutionOptions options = + SchemaManagementToolCoordinator.buildExecutionOptions( + registry + .getService(ConfigurationService.class) + .getSettings(), + handler + ); + + Map config = options.getConfigurationValues(); + + tool.getSchemaMigrator(config).doMigration(metadata, options, target); + + return handler; } }