X-Git-Url: https://juplo.de/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Fplugins%2Fhibernate%2FCreateMojo.java;h=a6c2ba42b4b9140125d685085fd6b8649cd55348;hb=505d13bdca776dd80f661a52797789b87e97b200;hp=5bafe14ddec7c7830aea5fd7f0a04acca2d3ba45;hpb=8e5921c9e76b4540f1d4b75e05e338001145ff6d;p=hibernate4-maven-plugin diff --git a/src/main/java/de/juplo/plugins/hibernate/CreateMojo.java b/src/main/java/de/juplo/plugins/hibernate/CreateMojo.java index 5bafe14d..a6c2ba42 100644 --- a/src/main/java/de/juplo/plugins/hibernate/CreateMojo.java +++ b/src/main/java/de/juplo/plugins/hibernate/CreateMojo.java @@ -16,16 +16,29 @@ package de.juplo.plugins.hibernate; * limitations under the License. */ +import static de.juplo.plugins.hibernate.AbstractSchemaMojo.EXECUTE; import java.io.File; +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.tool.hbm2ddl.SchemaExport; +import org.hibernate.cfg.AvailableSettings; +import org.hibernate.engine.config.spi.ConfigurationService; +import org.hibernate.service.ServiceRegistry; +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.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 create a database-schema that represents the + * configured mappings. * * @goal create * @phase process-classes @@ -41,7 +54,7 @@ public class CreateMojo extends AbstractSchemaMojo * relative to the project build directory * (project.build.directory). * - * @parameter property="hibernate.schema.export.create" default-value="create.sql" + * @parameter property="hibernate.schema.create" default-value="create.sql" * @since 1.0 */ private String outputFile; @@ -58,43 +71,56 @@ public class CreateMojo extends AbstractSchemaMojo @Override - void build(MetadataImplementor metadata) + ExceptionHandlerCollectingImpl build( + final MetadataImplementor metadata, + final File output + ) throws MojoExecutionException, MojoFailureException { - SchemaExport schemaExport = new SchemaExport(metadata, createNamespaces); - schemaExport.setDelimiter(delimiter); - schemaExport.setFormat(format); + final ServiceRegistry registry = + metadata.getMetadataBuildingOptions().getServiceRegistry(); + final Map settings = + registry.getService(ConfigurationService.class).getSettings(); + SchemaManagementTool tool = registry.getService(SchemaManagementTool.class); - File output = new File(outputFile); + final EnumSet targetTypes = EnumSet.of(TargetType.SCRIPT); + if ((Boolean)settings.get(EXECUTE)) + targetTypes.add(TargetType.DATABASE); - if (!output.isAbsolute()) + TargetDescriptor target = new TargetDescriptor() { - // Interpret relative file path relative to build directory - output = new File(buildDirectory, outputFile); - getLog().debug("Adjusted relative path, resulting path is " + output.getPath()); - } - - // Ensure that directory path for specified file exists - File outFileParentDir = output.getParentFile(); - if (null != outFileParentDir && !outFileParentDir.exists()) - { - try + @Override + public EnumSet getTargetTypes() { - getLog().info("Creating directory path for output file:" + outFileParentDir.getPath()); - outFileParentDir.mkdirs(); + return targetTypes; } - catch (Exception e) + + @Override + public ScriptTargetOutput getScriptTargetOutput() { - getLog().error("Error creating directory path for output file: " + e.getLocalizedMessage()); + String charset = + (String)settings.get(AvailableSettings.HBM2DDL_CHARSET_NAME); + return new ScriptTargetOutputToFile(output, charset); } - } + }; + + ExceptionHandlerCollectingImpl handler = + new ExceptionHandlerCollectingImpl(); + + ExecutionOptions options = + SchemaManagementToolCoordinator.buildExecutionOptions( + registry + .getService(ConfigurationService.class) + .getSettings(), + handler + ); + + Map config = options.getConfigurationValues(); - schemaExport.setOutputFile(output.getPath()); - schemaExport.execute(false, this.export, false, true); + tool.getSchemaMigrator(config).doMigration(metadata, options, target); - for (Object exception : schemaExport.getExceptions()) - getLog().error(exception.toString()); + return handler; } }