X-Git-Url: https://juplo.de/gitweb/?p=percentcodec;a=blobdiff_plain;f=maven-plugins%2Fhibernate4%2Fsrc%2Fmain%2Fjava%2Fde%2Fjuplo%2Fplugins%2Fhibernate4%2FHbm2DdlMojo.java;fp=maven-plugins%2Fhibernate4%2Fsrc%2Fmain%2Fjava%2Fde%2Fjuplo%2Fplugins%2Fhibernate4%2FHbm2DdlMojo.java;h=f2fd23203652c19133eb59e14677e48dfbbdb94a;hp=0000000000000000000000000000000000000000;hb=a6e0e65cce68acb20abc6ca935471611a740c342;hpb=1d395c6002486d485bde0d5dc713886d70bd3f8a
diff --git a/maven-plugins/hibernate4/src/main/java/de/juplo/plugins/hibernate4/Hbm2DdlMojo.java b/maven-plugins/hibernate4/src/main/java/de/juplo/plugins/hibernate4/Hbm2DdlMojo.java
new file mode 100644
index 00000000..f2fd2320
--- /dev/null
+++ b/maven-plugins/hibernate4/src/main/java/de/juplo/plugins/hibernate4/Hbm2DdlMojo.java
@@ -0,0 +1,433 @@
+package de.juplo.plugins.hibernate4;
+
+/*
+ * 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 com.pyx4j.log4j.MavenLogAppender;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.sql.Connection;
+import java.sql.Driver;
+import java.sql.DriverManager;
+import java.sql.DriverPropertyInfo;
+import java.sql.SQLException;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.Properties;
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.Embeddable;
+import javax.persistence.MappedSuperclass;
+import org.apache.maven.plugin.AbstractMojo;
+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.tool.hbm2ddl.SchemaExport;
+import org.hibernate.tool.hbm2ddl.SchemaExport.Type;
+import org.hibernate.tool.hbm2ddl.Target;
+import org.scannotation.AnnotationDB;
+
+
+/**
+ * Goal which extracts the hibernate-mapping-configuration and
+ * exports an according SQL-database-schema.
+ *
+ * @goal export
+ * @phase process-classes
+ * @threadSafe
+ * @requiresDependencyResolution runtime
+ */
+public class Hbm2DdlMojo extends AbstractMojo
+{
+ /**
+ * The project whose project files to create.
+ *
+ * @parameter expression="${project}"
+ * @required
+ * @readonly
+ */
+ private MavenProject project;
+
+ /**
+ * Directories to scan.
+ *
+ * @parameter expression="${project.build.outputDirectory}"
+ */
+ private String outputDirectory;
+
+ /**
+ * Skip execution
+ *
+ * @parameter default-value="false"
+ */
+ private boolean skip;
+
+ /**
+ * SQL-Driver name.
+ *
+ * @parameter expression="${hibernate.connection.driver_class}
+ */
+ private String driverClassName;
+
+ /**
+ * Database URL.
+ *
+ * @parameter expression="${hibernate.connection.url}"
+ */
+ private String url;
+
+ /**
+ * Database username
+ *
+ * @parameter expression="${hibernate.connection.username}"
+ */
+ private String username;
+
+ /**
+ * Database password
+ *
+ * @parameter expression="${hibernate.connection.password}"
+ */
+ private String password;
+
+ /**
+ * Hibernate dialect.
+ *
+ * @parameter expression="${hibernate.dialect}"
+ */
+ private String hibernateDialect;
+
+ /**
+ * Hibernate configuration file.
+ *
+ * @parameter default-value="${project.build.outputDirectory}/hibernate.properties"
+ */
+ private String hibernateProperties;
+
+ /**
+ * Target of execution:
+ *
+ * - NONE do nothing - just validate the configuration
+ * - EXPORT create database (DEFAULT!)
+ * - SCRIPT export schema to SQL-script
+ * - BOTH
+ *
+ * @parameter default-value="EXPORT"
+ */
+ private String target;
+
+ /**
+ * Type of export.
+ *
+ * - NONE do nothing - just validate the configuration
+ * - CREATE create database-schema
+ * - DROP drop database-schema
+ * - BOTH (DEFAULT!)
+ *
+ * @parameter default-value="BOTH"
+ */
+ private String type;
+
+ /**
+ * Output file.
+ *
+ * @parameter default-value="${project.build.outputDirectory}/schema.sql"
+ */
+ private String outputFile;
+
+ /**
+ * Delimiter in output-file.
+ *
+ * @parameter default-value=";"
+ */
+ private String delimiter;
+
+ /**
+ * Format output-file.
+ *
+ * @parameter default-value="true"
+ */
+ private boolean format;
+
+
+ @Override
+ public void execute()
+ throws
+ MojoFailureException,
+ MojoExecutionException
+ {
+ if (skip)
+ return;
+
+ File dir = new File(outputDirectory);
+ if (!dir.exists())
+ throw new MojoExecutionException("Cannot scan for annotated classes in " + outputDirectory + ": directory does not exist!");
+
+
+ Set classes = new HashSet();
+ URL dirUrl = null;
+ try {
+ AnnotationDB db = new AnnotationDB();
+ getLog().info("Scanning directory " + outputDirectory + " for annotated classes...");
+ dirUrl = dir.toURI().toURL();
+ db.scanArchives(dirUrl);
+ if (db.getAnnotationIndex().containsKey(Entity.class.getName()))
+ classes.addAll(db.getAnnotationIndex().get(Entity.class.getName()));
+ if (db.getAnnotationIndex().containsKey(MappedSuperclass.class.getName()))
+ classes.addAll(db.getAnnotationIndex().get(MappedSuperclass.class.getName()));
+ if (db.getAnnotationIndex().containsKey(Embeddable.class.getName()))
+ classes.addAll(db.getAnnotationIndex().get(Embeddable.class.getName()));
+ }
+ catch (IOException e) {
+ getLog().error("Error while scanning!", e);
+ throw new MojoFailureException(e.getMessage());
+ }
+ if (classes.isEmpty())
+ throw new MojoFailureException("No annotated classes found in directory " + outputDirectory);
+
+ Properties properties = new Properties();
+
+ /** Try to read configuration from properties-file */
+ try {
+ File file = new File(hibernateProperties);
+ if (file.exists()) {
+ getLog().info("Reading properties from file " + hibernateProperties + "...");
+ properties.load(new FileInputStream(file));
+ }
+ else
+ getLog().info("Ignoring nonexistent properties-file " + hibernateProperties + "!");
+ }
+ catch (IOException e) {
+ getLog().error("Error while reading properties!", e);
+ throw new MojoExecutionException(e.getMessage());
+ }
+
+ /** Overwrite values from propertie-file or set if given */
+ if (driverClassName != null)
+ properties.setProperty("hibernate.connection.driver_class", driverClassName);
+ if (url != null)
+ properties.setProperty("hibernate.connection.url", url);
+ if (username != null)
+ properties.setProperty("hibernate.connection.username", username);
+ if (password != null)
+ properties.setProperty("hibernate.connection.password", password);
+ if (hibernateDialect != null)
+ properties.setProperty("hibernate.dialect", hibernateDialect);
+
+ if (properties.isEmpty())
+ getLog().warn("No properties set!");
+ for (Entry