Fixed problem with NamingStrategy (contribution from Lorenzo Nicora)
[hibernate4-maven-plugin] / src / main / java / de / juplo / plugins / hibernate4 / Hbm2DdlMojo.java
index 3b3a72b..36a5aca 100644 (file)
@@ -53,6 +53,7 @@ import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.project.MavenProject;
 import org.hibernate.cfg.Configuration;
+import org.hibernate.cfg.NamingStrategy;
 import org.hibernate.tool.hbm2ddl.SchemaExport;
 import org.hibernate.tool.hbm2ddl.SchemaExport.Type;
 import org.hibernate.tool.hbm2ddl.Target;
@@ -77,6 +78,7 @@ public class Hbm2DdlMojo extends AbstractMojo
   public final static String USERNAME = "hibernate.connection.username";
   public final static String PASSWORD = "hibernate.connection.password";
   public final static String DIALECT = "hibernate.dialect";
+  public final static String NAMING_STRATEGY="hibernate.ejb.naming_strategy";
 
   private final static String MD5S = "schema.md5s";
 
@@ -85,7 +87,7 @@ public class Hbm2DdlMojo extends AbstractMojo
    * <p>
    * Only needed internally.
    *
-   * @parameter expression="${project}"
+   * @parameter property="project"
    * @required
    * @readonly
    */
@@ -96,7 +98,7 @@ public class Hbm2DdlMojo extends AbstractMojo
    * <p>
    * Only needed internally.
    *
-   * @parameter expression="${project.build.directory}"
+   * @parameter property="project.build.directory"
    * @required
    * @readonly
    */
@@ -108,7 +110,7 @@ public class Hbm2DdlMojo extends AbstractMojo
    * This parameter defaults to the maven build-output-directory for classes.
    * Additonally, all dependencies are scanned for annotated classes.
    *
-   * @parameter expression="${project.build.outputDirectory}"
+   * @parameter property="project.build.outputDirectory"
    */
   private String outputDirectory;
 
@@ -118,7 +120,7 @@ public class Hbm2DdlMojo extends AbstractMojo
    * If this parameter is set to <code>true</code> the test-classes of the
    * artifact will be scanned for hibernate-annotated classes additionally.
    *
-   * @parameter expression="${hibernate.export.scann_testclasses}" default-value="false"
+   * @parameter property="hibernate.export.scan_testclasses" default-value="false"
    */
   private boolean scanTestClasses;
 
@@ -131,7 +133,7 @@ public class Hbm2DdlMojo extends AbstractMojo
    * This parameter is only used, when <code>scanTestClasses</code> is set
    * to <code>true</code>!
    *
-   * @parameter expression="${project.build.testOutputDirectory}"
+   * @parameter property="project.build.testOutputDirectory"
    */
   private String testOutputDirectory;
 
@@ -146,7 +148,7 @@ public class Hbm2DdlMojo extends AbstractMojo
    * The excecution is skipped automatically, if no modified or newly added
    * annotated classes are found and the dialect was not changed.
    *
-   * @parameter expression="${maven.test.skip}" default-value="false"
+   * @parameter property="maven.test.skip" default-value="false"
    */
   private boolean skip;
 
@@ -158,45 +160,52 @@ public class Hbm2DdlMojo extends AbstractMojo
    * <p>
    * <code>skip</code> takes precedence over <code>force</code>.
    *
-   * @parameter expression="${hibernate.export.force}" default-value="false"
+   * @parameter property="hibernate.export.force" default-value="false"
    */
   private boolean force;
 
   /**
    * SQL-Driver name.
    *
-   * @parameter expression="${hibernate.connection.driver_class}
+   * @parameter property="hibernate.connection.driver_class"
    */
   private String driverClassName;
 
   /**
    * Database URL.
    *
-   * @parameter expression="${hibernate.connection.url}"
+   * @parameter property="hibernate.connection.url"
    */
   private String url;
 
   /**
    * Database username
    *
-   * @parameter expression="${hibernate.connection.username}"
+   * @parameter property="hibernate.connection.username"
    */
   private String username;
 
   /**
    * Database password
    *
-   * @parameter expression="${hibernate.connection.password}"
+   * @parameter property="hibernate.connection.password"
    */
   private String password;
 
   /**
    * Hibernate dialect.
    *
-   * @parameter expression="${hibernate.dialect}"
+   * @parameter property="hibernate.dialect"
    */
   private String hibernateDialect;
 
+  /**
+   * Hibernate Naming Strategy
+   * @parameter property="hibernate.ejb.naming_strategy"
+   * @author nicus
+   */
+  private String hibernateNamingStrategy;
+
   /**
    * Path to Hibernate configuration file.
    *
@@ -212,7 +221,8 @@ public class Hbm2DdlMojo extends AbstractMojo
    *   <li><strong>SCRIPT</strong> export schema to SQL-script</li>
    *   <li><strong>BOTH</strong></li>
    * </ul>
-   * @parameter expression="${hibernate.export.target}" default-value="EXPORT"
+   *
+   * @parameter property="hibernate.export.target" default-value="EXPORT"
    */
   private String target;
 
@@ -224,28 +234,29 @@ public class Hbm2DdlMojo extends AbstractMojo
    *   <li><strong>DROP</strong> drop database-schema</li>
    *   <li><strong>BOTH</strong> (<strong>DEFAULT!</strong>)</li>
    * </ul>
-   * @parameter expression="${hibernate.export.type}" default-value="BOTH"
+   *
+   * @parameter property="hibernate.export.type" default-value="BOTH"
    */
   private String type;
 
   /**
    * Output file.
    *
-   * @parameter expression="${hibernate.export.schema.filename}" default-value="${project.build.directory}/schema.sql"
+   * @parameter property="hibernate.export.schema.filename" default-value="${project.build.directory}/schema.sql"
    */
   private String outputFile;
 
   /**
    * Delimiter in output-file.
    *
-   * @parameter expression="${hibernate.export.schema.delimiter}" default-value=";"
+   * @parameter property="hibernate.export.schema.delimiter" default-value=";"
    */
   private String delimiter;
 
   /**
    * Format output-file.
    *
-   * @parameter expression="${hibernate.export.schema.format}" default-value="true"
+   * @parameter property="hibernate.export.schema.format" default-value="true"
    */
   private boolean format;
 
@@ -466,7 +477,7 @@ public class Hbm2DdlMojo extends AbstractMojo
         getLog().debug(
             "Overwriting property " +
             PASSWORD + "=" + properties.getProperty(PASSWORD) +
-            " with the value " + password 
+            " with the value " + password
           );
       else
         getLog().debug("Using the value " + password);
@@ -484,6 +495,18 @@ public class Hbm2DdlMojo extends AbstractMojo
         getLog().debug("Using the value " + hibernateDialect);
       properties.setProperty(DIALECT, hibernateDialect);
     }
+    if ( hibernateNamingStrategy != null )
+    {
+      if ( properties.contains(NAMING_STRATEGY))
+        getLog().debug(
+            "Overwriting property " +
+            NAMING_STRATEGY + "=" + properties.getProperty(NAMING_STRATEGY) +
+            " with the value " + hibernateNamingStrategy
+           );
+      else
+        getLog().debug("Using the value " + hibernateNamingStrategy);
+      properties.setProperty(NAMING_STRATEGY, hibernateNamingStrategy);
+    }
 
     /** The generated SQL varies with the dialect! */
     if (md5s.containsKey(DIALECT))
@@ -512,6 +535,24 @@ public class Hbm2DdlMojo extends AbstractMojo
 
     Configuration config = new Configuration();
     config.setProperties(properties);
+
+    if ( properties.containsKey(NAMING_STRATEGY))
+    {
+      String namingStrategy = properties.getProperty(NAMING_STRATEGY);
+      getLog().debug("Explicitly set NamingStrategy: " + namingStrategy);
+      try
+      {
+        @SuppressWarnings("unchecked")
+        Class<NamingStrategy> namingStrategyClass = (Class<NamingStrategy>) Class.forName(namingStrategy);
+        config.setNamingStrategy(namingStrategyClass.newInstance());
+      }
+      catch (Exception e)
+      {
+        getLog().error("Error setting NamingStrategy", e);
+        throw new MojoExecutionException(e.getMessage());
+      }
+    }
+
     getLog().debug("Adding annotated classes to hibernate-mapping-configuration...");
     for (Class<?> annotatedClass : classes)
     {