WIP
[hibernate4-maven-plugin] / src / main / java / de / juplo / plugins / hibernate / UpdateMojo.java
index c5237bd..09b74a3 100644 (file)
@@ -16,13 +16,22 @@ package de.juplo.plugins.hibernate;
  * limitations under the License.
  */
 
+import java.util.EnumSet;
+import java.util.HashMap;
 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.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;
 
 
@@ -61,19 +70,47 @@ public class UpdateMojo extends AbstractSchemaMojo
 
 
   @Override
-  void build(
-      MetadataImplementor metadata,
-      ExecutionOptions options,
-      TargetDescriptor target
-      )
+  ExceptionHandlerCollectingImpl build(MetadataImplementor metadata)
       throws
         MojoExecutionException,
         MojoFailureException
   {
-    ServiceRegistry service =
+    final ServiceRegistry service =
         metadata.getMetadataBuildingOptions().getServiceRegistry();
     SchemaManagementTool tool = service.getService(SchemaManagementTool.class);
 
+    final EnumSet<TargetType> targetTypes = EnumSet.of(TargetType.SCRIPT);
+    if (execute)
+      targetTypes.add(TargetType.DATABASE);
+
+    TargetDescriptor target = new TargetDescriptor()
+    {
+      @Override
+      public EnumSet<TargetType> getTargetTypes()
+      {
+        return targetTypes;
+      }
+
+      @Override
+      public ScriptTargetOutput getScriptTargetOutput()
+      {
+        String charset
+            = (String) service
+            .getService(ConfigurationService.class)
+            .getSettings()
+            .get(AvailableSettings.HBM2DDL_CHARSET_NAME);
+        return new ScriptTargetOutputToFile(output, charset);
+      }
+    };
+
+    ExecutionOptions options =
+        SchemaManagementToolCoordinator.buildExecutionOptions(
+            service
+                .getService(ConfigurationService.class)
+                .getSettings(),
+            new ExceptionHandlerCollectingImpl()
+            );
+
     Map config = options.getConfigurationValues();
 
     tool.getSchemaMigrator(config).doMigration(metadata, options, target);