You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by km...@apache.org on 2008/08/16 21:09:01 UTC
svn commit: r686538 -
/cayenne/main/trunk/framework/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/DbGeneratorMojo.java
Author: kmenard
Date: Sat Aug 16 12:09:00 2008
New Revision: 686538
URL: http://svn.apache.org/viewvc?rev=686538&view=rev
Log:
Fixed CAY-590: Add a DB generator plugin for Maven 2.
Added:
cayenne/main/trunk/framework/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/DbGeneratorMojo.java
Added: cayenne/main/trunk/framework/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/DbGeneratorMojo.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/DbGeneratorMojo.java?rev=686538&view=auto
==============================================================================
--- cayenne/main/trunk/framework/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/DbGeneratorMojo.java (added)
+++ cayenne/main/trunk/framework/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/DbGeneratorMojo.java Sat Aug 16 12:09:00 2008
@@ -0,0 +1,182 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ ****************************************************************/
+
+package org.apache.cayenne.tools;
+
+import org.apache.cayenne.access.DbGenerator;
+import org.apache.cayenne.conn.DriverDataSource;
+import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.dba.JdbcAdapter;
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.MapLoader;
+import org.apache.cayenne.util.Util;
+import org.apache.commons.logging.Log;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.xml.sax.InputSource;
+
+import java.io.File;
+import java.sql.Driver;
+
+/**
+ * Maven mojo to perform class generation from data map. This class is an Maven
+ * adapter to DefaultClassGenerator class.
+ *
+ * @author Kevin Menard
+ * @since 3.0
+ *
+ * @phase pre-integration-test
+ * @goal cdbgen
+ */
+public class DbGeneratorMojo extends AbstractMojo {
+
+ /**
+ * DataMap XML file to use as a schema descriptor.
+ *
+ * @parameter expression="${cdbgen.map}"
+ * @required
+ */
+ private File map;
+
+ /**
+ * Java class implementing org.apache.cayenne.dba.DbAdapter.
+ * While this attribute is optional (a generic JdbcAdapter is used if not set),
+ * it is highly recommended to specify correct target adapter.
+ *
+ * @parameter expression="${cdbgen.adapter}"
+ */
+ private String adapter;
+
+ /**
+ * A class of JDBC driver to use for the target database.
+ *
+ * @parameter expression="${cdbgen.driver}"
+ * @required
+ */
+ private String driver;
+
+ /**
+ * JDBC connection URL of a target database.
+ *
+ * @parameter expression="${cdbgen.url}"
+ * @required
+ */
+ private String url;
+
+ /**
+ * Database user name.
+ *
+ * @parameter expression="${cdbgen.username}"
+ */
+ private String username;
+
+ /**
+ * Database user password.
+ *
+ * @parameter expression="${cdbgen.password}"
+ */
+ private String password;
+
+ /**
+ * Defines whether cdbgen should drop the tables before attempting to create new ones.
+ * Default is <code>false</code>.
+ *
+ * @parameter expression="${cdbgen.dropTables}" default-value="false"
+ */
+ private boolean dropTables;
+
+ /**
+ * Defines whether cdbgen should drop Cayenne primary key support objects. Default is <code>false</code>.
+ *
+ * @parameter expression="${cdbgen.dropPK}" default-value="false"
+ */
+ private boolean dropPK;
+
+ /**
+ * Defines whether cdbgen should create new tables. Default is <code>true</code>.
+ *
+ * @parameter expression="${cdbgen.createTables}" default-value="true"
+ */
+ private boolean createTables;
+
+ /**
+ * Defines whether cdbgen should create Cayenne-specific auto PK objects. Default is <code>true</code>.
+ *
+ * @parameter expression="${cdbgen.createPK}" default-value="true"
+ */
+ private boolean createPK;
+
+ /**
+ * Defines whether cdbgen should create foreign key copnstraints. Default is <code>true</code>.
+ *
+ * @parameter expression="${cdbgen.createFK}' default-value="true"
+ */
+ private boolean createFK;
+
+
+ public void execute() throws MojoExecutionException, MojoFailureException {
+
+ Log logger = new MavenLogger(this);
+
+ logger.info(String.format("connection settings - [driver: %s, url: %s, username: %s]", driver, url, username));
+
+ logger.info(String.format("generator options - [dropTables: %s, dropPK: %s, createTables: %s, createPK: %s, createFK: %s]",
+ dropTables, dropPK, createTables, createPK, createFK));
+
+ try {
+ final DbAdapter adapterInst = (adapter == null) ? new JdbcAdapter()
+ : (DbAdapter) Class.forName(adapter).newInstance();
+
+ // Load the data map and run the db generator.
+ DataMap dataMap = loadDataMap();
+ DbGenerator generator = new DbGenerator(adapterInst, dataMap);
+ generator.setShouldCreateFKConstraints(createFK);
+ generator.setShouldCreatePKSupport(createPK);
+ generator.setShouldCreateTables(createTables);
+ generator.setShouldDropPKSupport(dropPK);
+ generator.setShouldDropTables(dropTables);
+
+ // load driver taking custom CLASSPATH into account...
+ DriverDataSource dataSource = new DriverDataSource((Driver) Class.forName(
+ driver).newInstance(), url, username, password);
+
+ generator.runGenerator(dataSource);
+ }
+ catch (Exception ex) {
+ Throwable th = Util.unwindException(ex);
+
+ String message = "Error generating database";
+
+ if (th.getLocalizedMessage() != null) {
+ message += ": " + th.getLocalizedMessage();
+ }
+
+ logger.error(message);
+ throw new MojoExecutionException(message, th);
+ }
+ }
+
+ /** Loads and returns DataMap based on <code>map</code> attribute. */
+ protected DataMap loadDataMap() throws Exception {
+ InputSource in = new InputSource(map.getCanonicalPath());
+ return new MapLoader().loadDataMap(in);
+ }
+
+}