WIP
authorKai Moritz <kai@juplo.de>
Sat, 2 May 2015 19:26:34 +0000 (21:26 +0200)
committerKai Moritz <kai@juplo.de>
Sat, 2 May 2015 19:26:34 +0000 (21:26 +0200)
src/main/java/de/juplo/plugins/hibernate4/Hbm2DdlMojo.java

index 85ae518..b85c601 100644 (file)
@@ -61,8 +61,6 @@ import org.apache.maven.project.MavenProject;
 import org.hibernate.cfg.NamingStrategy;
 import org.hibernate.envers.configuration.spi.AuditConfiguration;
 import org.hibernate.tool.hbm2ddl.SchemaExport;
-import org.hibernate.tool.hbm2ddl.SchemaExport.Type;
-import org.hibernate.tool.hbm2ddl.Target;
 import org.scannotation.AnnotationDB;
 
 
@@ -264,37 +262,36 @@ public class Hbm2DdlMojo extends AbstractMojo
   private String hibernateMapping;
 
   /**
-   * Target of execution:
-   * <ul>
-   *   <li><strong>NONE</strong> only export schema to SQL-script (forces execution, signals skip)</li>
-   *   <li><strong>EXPORT</strong> create database (<strong>DEFAULT!</strong>). forces execution, signals skip)</li>
-   *   <li><strong>SCRIPT</strong> export schema to SQL-script and print it to STDOUT</li>
-   *   <li><strong>BOTH</strong></li>
-   * </ul>
+   * Do not output the script to stdout.
    *
-   * A database connection is only needed for EXPORT and BOTH, but a
-   * Hibernate-Dialect must always be chosen.
+   * @parameter property="hibernate.export.quiet" default-value="true"
+   * @since 1.0.6
+   */
+  private boolean quiet;
+
+  /**
+   * Only drop the tables.
    *
-   * @parameter property="hibernate.export.target" default-value="EXPORT"
-   * @since 1.0
+   * @parameter property="hibernate.export.drop" default-value="true"
+   * @since 1.0.6
    */
-  private String target;
+  private boolean drop;
 
   /**
-   * Type of execution.
-   * <ul>
-   *   <li><strong>NONE</strong> do nothing - just validate the configuration</li>
-   *   <li><strong>CREATE</strong> create database-schema</li>
-   *   <li><strong>DROP</strong> drop database-schema</li>
-   *   <li><strong>BOTH</strong> (<strong>DEFAULT!</strong>)</li>
-   * </ul>
+   * Only create the tables.
    *
-   * If NONE is choosen, no databaseconnection is needed.
+   * @parameter property="hibernate.export.create" default-value="true"
+   * @since 1.0.6
+   */
+  private boolean create;
+
+  /**
+   * Do not export to the database.
    *
-   * @parameter property="hibernate.export.type" default-value="BOTH"
-   * @since 1.0
+   * @parameter property="hibernate.export.text" default-value="false"
+   * @since 1.0.6
    */
-  private String type;
+  private boolean text;
 
   /**
    * Output file.
@@ -787,50 +784,24 @@ public class Hbm2DdlMojo extends AbstractMojo
         }
       }
 
-      Target target = null;
-      try
-      {
-        target = Target.valueOf(this.target.toUpperCase());
-      }
-      catch (IllegalArgumentException e)
-      {
-        getLog().error("Invalid value for configuration-option \"target\": " + this.target);
-        getLog().error("Valid values are: NONE, SCRIPT, EXPORT, BOTH");
-        throw new MojoExecutionException("Invalid value for configuration-option \"target\"");
-      }
-      Type type = null;
-      try
-      {
-        type = Type.valueOf(this.type.toUpperCase());
-      }
-      catch (IllegalArgumentException e)
-      {
-        getLog().error("Invalid value for configuration-option \"type\": " + this.type);
-        getLog().error("Valid values are: NONE, CREATE, DROP, BOTH");
-        throw new MojoExecutionException("Invalid value for configuration-option \"type\"");
-      }
-
-      if (target.equals(Target.SCRIPT) || target.equals(Target.NONE))
-      {
-        project.getProperties().setProperty(EXPORT_SKIPPED_PROPERTY, "true");
-      }
-      if (
-          !modified
-          && !target.equals(Target.SCRIPT)
-          && !target.equals(Target.NONE)
-          && !force
-        )
-      {
-        getLog().info("No modified annotated classes or mapping-files found and dialect unchanged.");
-        getLog().info("Skipping schema generation!");
-        project.getProperties().setProperty(EXPORT_SKIPPED_PROPERTY, "true");
-        return;
-      }
-
       getLog().info("Gathered hibernate-configuration (turn on debugging for details):");
       for (Entry<Object,Object> entry : properties.entrySet())
         getLog().info("  " + entry.getKey() + " = " + entry.getValue());
 
+      if (!modified)
+      {
+        getLog().info(
+          "No modified annotated classes or mapping-files found and dialect " +
+          "unchanged."
+          );
+        if (!force)
+        {
+          getLog().info("Skipping schema generation!");
+          project.getProperties().setProperty(EXPORT_SKIPPED_PROPERTY, "true");
+          return;
+        }
+      }
+
       try
       {
         /**
@@ -838,33 +809,24 @@ public class Hbm2DdlMojo extends AbstractMojo
          * hibernate does not use the context-classloader of the current
          * thread and, hence, would not be able to resolve the driver-class!
          */
-        getLog().debug("Target: " + target + ", Type: " + type);
-        switch (target)
+        if (!text && (create || drop))
         {
-          case EXPORT:
-          case BOTH:
-            switch (type)
-            {
-              case CREATE:
-              case DROP:
-              case BOTH:
-                Class driverClass = classLoader.loadClass(properties.getProperty(DRIVER_CLASS));
-                getLog().debug("Registering JDBC-driver " + driverClass.getName());
-                DriverManager.registerDriver(new DriverProxy((Driver)driverClass.newInstance()));
-                getLog().debug(
-                    "Opening JDBC-connection to "
-                    + properties.getProperty(URL)
-                    + " as "
-                    + properties.getProperty(USERNAME)
-                    + " with password "
-                    + properties.getProperty(PASSWORD)
-                    );
-                connection = DriverManager.getConnection(
-                    properties.getProperty(URL),
-                    properties.getProperty(USERNAME),
-                    properties.getProperty(PASSWORD)
-                    );
-            }
+          Class driverClass = classLoader.loadClass(properties.getProperty(DRIVER_CLASS));
+          getLog().debug("Registering JDBC-driver " + driverClass.getName());
+          DriverManager.registerDriver(new DriverProxy((Driver)driverClass.newInstance()));
+          getLog().debug(
+              "Opening JDBC-connection to "
+              + properties.getProperty(URL)
+              + " as "
+              + properties.getProperty(USERNAME)
+              + " with password "
+              + properties.getProperty(PASSWORD)
+              );
+          connection = DriverManager.getConnection(
+              properties.getProperty(URL),
+              properties.getProperty(USERNAME),
+              properties.getProperty(PASSWORD)
+              );
         }
       }
       catch (ClassNotFoundException e)
@@ -920,7 +882,7 @@ public class Hbm2DdlMojo extends AbstractMojo
       }
 
       export.setOutputFile(outF.getPath());
-      export.execute(target, type);
+      export.execute(!quiet, !text, drop, create);
 
       for (Object exception : export.getExceptions())
         getLog().debug(exception.toString());