WIP
authorKai Moritz <kai@juplo.de>
Mon, 14 Nov 2016 18:04:32 +0000 (19:04 +0100)
committerKai Moritz <kai@juplo.de>
Mon, 14 Nov 2016 18:04:32 +0000 (19:04 +0100)
src/main/java/de/juplo/plugins/hibernate/AbstractSchemaMojo.java
src/main/java/de/juplo/plugins/hibernate/UpdateMojo.java
src/main/java/de/juplo/plugins/hibernate/ValidateMojo.java [new file with mode: 0644]

index c9ef2c5..ca6b935 100644 (file)
@@ -12,8 +12,6 @@ import java.net.URL;
 import java.security.NoSuchAlgorithmException;
 import java.time.ZonedDateTime;
 import java.util.Collections;
-import java.util.EnumSet;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.LinkedHashSet;
@@ -49,7 +47,6 @@ import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
 import org.hibernate.boot.registry.classloading.spi.ClassLoadingException;
 import org.hibernate.boot.registry.selector.spi.StrategySelector;
 import org.hibernate.boot.spi.MetadataImplementor;
-import org.hibernate.cfg.AvailableSettings;
 import static org.hibernate.cfg.AvailableSettings.DIALECT;
 import static org.hibernate.cfg.AvailableSettings.DRIVER;
 import static org.hibernate.cfg.AvailableSettings.FORMAT_SQL;
@@ -65,18 +62,11 @@ import static org.hibernate.cfg.AvailableSettings.PHYSICAL_NAMING_STRATEGY;
 import static org.hibernate.cfg.AvailableSettings.SHOW_SQL;
 import static org.hibernate.cfg.AvailableSettings.USER;
 import static org.hibernate.cfg.AvailableSettings.URL;
-import org.hibernate.engine.config.spi.ConfigurationService;
 import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
 import org.hibernate.internal.util.config.ConfigurationException;
 import org.hibernate.jpa.boot.internal.ParsedPersistenceXmlDescriptor;
 import org.hibernate.jpa.boot.internal.PersistenceXmlParser;
-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.SchemaManagementToolCoordinator;
-import org.hibernate.tool.schema.spi.ScriptTargetOutput;
-import org.hibernate.tool.schema.spi.TargetDescriptor;
 import org.scannotation.AnnotationDB;
 
 
@@ -686,42 +676,6 @@ public abstract class AbstractSchemaMojo extends AbstractMojo
             );
       }
 
-      /** Prepare the generation of the SQL */
-      Map settings = new HashMap();
-      settings.putAll(
-          serviceRegistry
-              .getService(ConfigurationService.class)
-              .getSettings()
-              );
-      ExceptionHandlerCollectingImpl handler =
-          new ExceptionHandlerCollectingImpl();
-      ExecutionOptions options =
-          SchemaManagementToolCoordinator
-              .buildExecutionOptions(settings, handler);
-      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)
-              serviceRegistry
-                  .getService(ConfigurationService.class)
-                  .getSettings()
-                  .get(AvailableSettings.HBM2DDL_CHARSET_NAME);
-          return new ScriptTargetOutputToFile(output, charset);
-        }
-      };
-
       /**
        * Change class-loader of current thread.
        * This is necessary, because still not all parts of Hibernate 5 use
@@ -732,7 +686,8 @@ public abstract class AbstractSchemaMojo extends AbstractMojo
       try
       {
         thread.setContextClassLoader(classLoader);
-        build((MetadataImplementor)metadataBuilder.build(), options, target);
+        ExceptionHandlerCollectingImpl handler =
+            build((MetadataImplementor)metadataBuilder.build());
         if (handler.getExceptions().size() > 0)
         {
           StringBuilder builder = new StringBuilder();
@@ -783,11 +738,7 @@ public abstract class AbstractSchemaMojo extends AbstractMojo
   }
 
 
-  abstract void build(
-      MetadataImplementor metadata,
-      ExecutionOptions options,
-      TargetDescriptor target
-      )
+  abstract ExceptionHandlerCollectingImpl build(MetadataImplementor metadata)
     throws
       MojoFailureException,
       MojoExecutionException;
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);
diff --git a/src/main/java/de/juplo/plugins/hibernate/ValidateMojo.java b/src/main/java/de/juplo/plugins/hibernate/ValidateMojo.java
new file mode 100644 (file)
index 0000000..ed31fdd
--- /dev/null
@@ -0,0 +1,64 @@
+package de.juplo.plugins.hibernate;
+
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ *
+ * 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 java.util.Map;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.hibernate.boot.spi.MetadataImplementor;
+import org.hibernate.service.ServiceRegistry;
+import org.hibernate.tool.schema.internal.ExceptionHandlerCollectingImpl;
+import org.hibernate.tool.schema.spi.ExecutionOptions;
+import org.hibernate.tool.schema.spi.SchemaManagementTool;
+import org.hibernate.tool.schema.spi.TargetDescriptor;
+
+
+/**
+ * Validate a database-schema against the configured mappings.
+ *
+ * @goal validate
+ * @phase process-classes
+ * @threadSafe
+ * @requiresDependencyResolution runtime
+ */
+public class ValidateMojo extends AbstractSchemaMojo
+{
+  @Override
+  public final void execute()
+    throws
+      MojoFailureException,
+      MojoExecutionException
+  {
+    super.execute(null);
+  }
+
+
+  @Override
+  ExceptionHandlerCollectingImpl build(MetadataImplementor metadata)
+      throws
+        MojoExecutionException,
+        MojoFailureException
+  {
+    ServiceRegistry service =
+        metadata.getMetadataBuildingOptions().getServiceRegistry();
+    SchemaManagementTool tool = service.getService(SchemaManagementTool.class);
+
+    Map config = options.getConfigurationValues();
+
+    tool.getSchemaMigrator(config).doMigration(metadata, options, target);
+  }
+}