Repository: empire-db Updated Branches: refs/heads/master 98059be83 -> 6bcd642fb
EMPIREDB-255 dependencies corrected and comments improved Project: http://git-wip-us.apache.org/repos/asf/empire-db/repo Commit: http://git-wip-us.apache.org/repos/asf/empire-db/commit/6bcd642f Tree: http://git-wip-us.apache.org/repos/asf/empire-db/tree/6bcd642f Diff: http://git-wip-us.apache.org/repos/asf/empire-db/diff/6bcd642f Branch: refs/heads/master Commit: 6bcd642fbe362b939fd67db109a4cb27ca331a93 Parents: 98059be Author: Rainer Döbele <[email protected]> Authored: Fri Jun 9 16:17:47 2017 +0200 Committer: Rainer Döbele <[email protected]> Committed: Fri Jun 9 16:17:47 2017 +0200 ---------------------------------------------------------------------- .../apache/empire/db/codegen/CodeGenConfig.java | 6 +- .../apache/empire/db/codegen/CodeGenParser.java | 2 +- .../empire-db-example-codegen/.gitignore | 3 + .../generate-config.xml | 85 ++++++++++++++++++++ .../empire-db-example-codegen/generate.bat | 37 +++++++++ .../empire-db-example-codegen/pom.xml | 71 +++++++++------- .../empire-db-example-codegen/readme.txt | 13 +++ .../examples/codegen/ValidatePluginRunTest.java | 54 +++++++------ .../org/apache/empire/db/maven/CodeGenMojo.java | 57 +++++++++++-- 9 files changed, 263 insertions(+), 65 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/empire-db/blob/6bcd642f/empire-db-codegen/src/main/java/org/apache/empire/db/codegen/CodeGenConfig.java ---------------------------------------------------------------------- diff --git a/empire-db-codegen/src/main/java/org/apache/empire/db/codegen/CodeGenConfig.java b/empire-db-codegen/src/main/java/org/apache/empire/db/codegen/CodeGenConfig.java index 1b8a15b..8c92d95 100644 --- a/empire-db-codegen/src/main/java/org/apache/empire/db/codegen/CodeGenConfig.java +++ b/empire-db-codegen/src/main/java/org/apache/empire/db/codegen/CodeGenConfig.java @@ -18,6 +18,7 @@ */ package org.apache.empire.db.codegen; +import org.apache.empire.commons.StringUtils; import org.apache.empire.exceptions.ItemNotFoundException; import org.apache.empire.exceptions.ObjectNotValidException; import org.apache.empire.xml.XMLConfiguration; @@ -208,7 +209,7 @@ public class CodeGenConfig extends XMLConfiguration { * if TRUE record classes should have a getter and setter for each field.<br/> * Otherwise getters / setters are omitted. */ - private boolean createRecordProperties; + private boolean createRecordProperties = false; /** * true if names of tables and views should not be camel-cased @@ -379,7 +380,8 @@ public class CodeGenConfig extends XMLConfiguration { } public void setDbClassName(String dbClassName) { - this.dbClassName = dbClassName; + if (StringUtils.isNotEmpty(dbClassName)) + this.dbClassName = dbClassName; } public String getTableBaseName() { http://git-wip-us.apache.org/repos/asf/empire-db/blob/6bcd642f/empire-db-codegen/src/main/java/org/apache/empire/db/codegen/CodeGenParser.java ---------------------------------------------------------------------- diff --git a/empire-db-codegen/src/main/java/org/apache/empire/db/codegen/CodeGenParser.java b/empire-db-codegen/src/main/java/org/apache/empire/db/codegen/CodeGenParser.java index e34292c..0f8b749 100644 --- a/empire-db-codegen/src/main/java/org/apache/empire/db/codegen/CodeGenParser.java +++ b/empire-db-codegen/src/main/java/org/apache/empire/db/codegen/CodeGenParser.java @@ -28,7 +28,7 @@ import java.sql.Types; import java.util.ArrayList; import java.util.List; -import org.apache.commons.lang.StringUtils; +import org.apache.empire.commons.StringUtils; import org.apache.empire.data.DataType; import org.apache.empire.db.DBColumn; import org.apache.empire.db.DBCommandExpr; http://git-wip-us.apache.org/repos/asf/empire-db/blob/6bcd642f/empire-db-examples/empire-db-example-codegen/.gitignore ---------------------------------------------------------------------- diff --git a/empire-db-examples/empire-db-example-codegen/.gitignore b/empire-db-examples/empire-db-example-codegen/.gitignore new file mode 100644 index 0000000..ddd6d6d --- /dev/null +++ b/empire-db-examples/empire-db-example-codegen/.gitignore @@ -0,0 +1,3 @@ +/.settings/ +/.classpath +/.project http://git-wip-us.apache.org/repos/asf/empire-db/blob/6bcd642f/empire-db-examples/empire-db-example-codegen/generate-config.xml ---------------------------------------------------------------------- diff --git a/empire-db-examples/empire-db-example-codegen/generate-config.xml b/empire-db-examples/empire-db-example-codegen/generate-config.xml new file mode 100644 index 0000000..76fefcd --- /dev/null +++ b/empire-db-examples/empire-db-example-codegen/generate-config.xml @@ -0,0 +1,85 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + 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. +--> +<config> + + <properties> + <!-- provider name must match the property-section containing the connection data --> + <jdbcClass>org.hsqldb.jdbcDriver</jdbcClass> + <jdbcURL>jdbc:hsqldb:file:src/test/resources/hsqldb/sample;shutdown=true</jdbcURL> + <jdbcUser>sa</jdbcUser> + <jdbcPwd></jdbcPwd> + + <!-- Schema options --> + <dbCatalog></dbCatalog> + <dbSchema></dbSchema> + <dbTablePattern></dbTablePattern> + <timestampColumn>CREATIONDATE</timestampColumn> + + <!-- generation options --> + <targetFolder>target/generated-sources/java</targetFolder> + <packageName>org.apache.empire.db.example</packageName> + <dbClassName>MyDatabase</dbClassName> + <nestTables>false</nestTables> + <nestViews>false</nestViews> + <createRecordProperties>true</createRecordProperties> + <preserverCharacterCase>false</preserverCharacterCase> + <preserveRelationNames>false</preserveRelationNames> + + <!-- generation options (optional) + <tablePackageName></tablePackageName> + <viewPackageName></viewPackageName> + <recordPackageName></recordPackageName> + <tableBaseName>SampleTable</tableBaseName> + <viewBaseName>SampleView</viewBaseName> + <recordBaseName>SampleRecord</recordBaseName> + <tableNamePrefix></tableNamePrefix> + <tableClassPrefix>T_</tableClassPrefix> + <tableClassSuffix></tableClassSuffix> + <viewNamePrefix></viewNamePrefix> + <viewClassPrefix>V_</viewClassPrefix> + <viewClassSuffix></viewClassSuffix> + <columnNamePrefix></columnNamePrefix> + --> + </properties> + + <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> + + <appender name="default" class="org.apache.log4j.ConsoleAppender"> + <!-- layout class="org.apache.log4j.TTCCLayout"/ --> + <layout class="org.apache.log4j.PatternLayout"> + <!-- param name="ConversionPattern" value="NSB(%c) %-5p %m at %l%n"/ --> + <param name="ConversionPattern" value="%-5p [%d{yyyy/MM/dd HH:mm}]: %m at %l %n"/> + </layout> + </appender> + + <!-- log detail configuration --> + <logger name="org.apache.empire.commons" additivity="false"> + <level value="warn"/> + <appender-ref ref="default"/> + </logger> + + <root> + <priority value="info"/> + <appender-ref ref="default"/> + </root> + + </log4j:configuration> + +</config> http://git-wip-us.apache.org/repos/asf/empire-db/blob/6bcd642f/empire-db-examples/empire-db-example-codegen/generate.bat ---------------------------------------------------------------------- diff --git a/empire-db-examples/empire-db-example-codegen/generate.bat b/empire-db-examples/empire-db-example-codegen/generate.bat new file mode 100644 index 0000000..008a03e --- /dev/null +++ b/empire-db-examples/empire-db-example-codegen/generate.bat @@ -0,0 +1,37 @@ +@echo off +IF [%1%] == [] GOTO INVALID_PARAMS +IF [%2%] == [] GOTO INVALID_PARAMS +rem base setting +set repo=%2% +set empire-db-version=2.4.7-SNAPSHOT +set jdbc-jar-path=hsqldb\hsqldb\1.8.0.10\hsqldb-1.8.0.10.jar +IF [%3%] == [] GOTO CLASSPATH +set jdbc-jar-path=%3% +rem Assemble classpath +:CLASSPATH +set classpath=%repo%\org\apache\empire-db\empire-db\%empire-db-version%\empire-db-%empire-db-version%.jar +set classpath=%classpath%;%repo%\org\apache\empire-db\empire-db-codegen\%empire-db-version%\empire-db-codegen-%empire-db-version%.jar +set classpath=%classpath%;%repo%\org\slf4j\slf4j-api\1.6.1\slf4j-api-1.6.1.jar +set classpath=%classpath%;%repo%\org\slf4j\slf4j-log4j12\1.6.1\slf4j-log4j12-1.6.1.jar +set classpath=%classpath%;%repo%\log4j\log4j\1.2.16\log4j-1.2.16.jar +set classpath=%classpath%;%repo%\commons-beanutils\commons-beanutils\1.8.3\commons-beanutils-1.8.3.jar +set classpath=%classpath%;%repo%\commons-logging\commons-logging\1.1.1\commons-logging-1.1.1.jar +set classpath=%classpath%;%repo%\org\apache\velocity\velocity\1.7\velocity-1.7.jar +set classpath=%classpath%;%repo%\commons-collections\commons-collections\3.2.1\commons-collections-3.2.1.jar +set classpath=%classpath%;%repo%\commons-lang\commons-lang\2.4\commons-lang-2.4.jar +rem The JDBC class libaray +set classpath=%classpath%;%repo%\%jdbc-jar-path% +echo Calling code generator +echo Config-File: %1% +echo JDBC-jar: %jdbc-jar-path% +echo Empire-db-version: %empire-db-version% +java -cp %classpath% org.apache.empire.db.codegen.CodeGenerator %1 +goto done +:INVALID_PARAMS +echo. +echo Please add your Config-File and the path to your Maven repository +echo. +echo generate XML_CONFIG_FILE MAVEN_REPO_PATH [PATH_TO_JDBC_JAR] +echo. +:DONE +pause \ No newline at end of file http://git-wip-us.apache.org/repos/asf/empire-db/blob/6bcd642f/empire-db-examples/empire-db-example-codegen/pom.xml ---------------------------------------------------------------------- diff --git a/empire-db-examples/empire-db-example-codegen/pom.xml b/empire-db-examples/empire-db-example-codegen/pom.xml index e257016..45247ff 100644 --- a/empire-db-examples/empire-db-example-codegen/pom.xml +++ b/empire-db-examples/empire-db-example-codegen/pom.xml @@ -16,40 +16,69 @@ --> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> - <groupId>org.apache.empire-db.examples</groupId> - <artifactId>empire-db-example-codegen</artifactId> - <version>1.0.0-SNAPSHOT</version> + <parent> + <groupId>org.apache.empire-db</groupId> + <artifactId>empire-db-examples</artifactId> + <version>2.4.7-SNAPSHOT</version> + </parent> + <artifactId>empire-db-example-codegen</artifactId> <name>Apache Empire-db Maven Codegen Example</name> - <description>Example showing the use of empire-db wrapped in a webservice</description> + <description>Example showing the use of the empire-db codegen maven plugin</description> + + <dependencies> + <dependency> + <groupId>org.apache.empire-db</groupId> + <artifactId>empire-db</artifactId> + </dependency> + + <dependency> + <groupId>hsqldb</groupId> + <artifactId>hsqldb</artifactId> + </dependency> + + <!-- test scope --> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.8.2</version> + <scope>test</scope> + </dependency> + </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> - <version>2.5.1</version> + <version>3.1</version> <configuration> - <source>1.5</source> - <target>1.5</target> + <source>1.6</source> + <target>1.6</target> <optimize>true</optimize> <debug>true</debug> </configuration> </plugin> + <!-- empire-db-maven-plugin --> <plugin> <groupId>org.apache.empire-db</groupId> <artifactId>empire-db-maven-plugin</artifactId> - <version>2.4.3-SNAPSHOT</version> + <version>${project.version}</version> <configuration> + <!-- either specify a config file --> + <configFile>generate-config.xml</configFile> + <!-- or provide the parameters directly <jdbcClass>org.hsqldb.jdbcDriver</jdbcClass> <jdbcURL>jdbc:hsqldb:file:${project.basedir}/src/test/resources/hsqldb/sample;shutdown=true</jdbcURL> <jdbcUser>sa</jdbcUser> <jdbcPwd></jdbcPwd> <packageName>org.apache.empire.db.example</packageName> + <dbClassName>MyDatabase</dbClassName> + --> </configuration> <executions> <!-- We enable the code generation on each build. The other option is - to leave out this section and call mvn empiredb:codegen + to leave out this section and call mvn generate-sources --> <execution> <goals> @@ -61,32 +90,12 @@ <dependency> <groupId>hsqldb</groupId> <artifactId>hsqldb</artifactId> - <version>1.8.0.10</version> + <version>1.8.0.10</version> </dependency> </dependencies> </plugin> + </plugins> </build> - <dependencies> - <dependency> - <groupId>org.apache.empire-db</groupId> - <artifactId>empire-db</artifactId> - <version>2.4.2</version> - </dependency> - <dependency> - <groupId>hsqldb</groupId> - <artifactId>hsqldb</artifactId> - <version>1.8.0.10</version> - </dependency> - - <!-- test scope --> - <dependency> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - <version>4.8.2</version> - <scope>test</scope> - </dependency> - </dependencies> - </project> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/empire-db/blob/6bcd642f/empire-db-examples/empire-db-example-codegen/readme.txt ---------------------------------------------------------------------- diff --git a/empire-db-examples/empire-db-example-codegen/readme.txt b/empire-db-examples/empire-db-example-codegen/readme.txt new file mode 100644 index 0000000..aedb5d8 --- /dev/null +++ b/empire-db-examples/empire-db-example-codegen/readme.txt @@ -0,0 +1,13 @@ + +To Reverse-Engineer an existing database use either of the following two methods: + +1. Use the code generator Maven plugin: + +> mvn clean generate-sources eclipse:clean eclipse:eclipse + +Please see comments in pom.xml for further details + +2. Run org.apache.empire.db.codegen.CodeGenerator from the command line: + +> generate generate-config.xml C:\Maven\Repo + http://git-wip-us.apache.org/repos/asf/empire-db/blob/6bcd642f/empire-db-examples/empire-db-example-codegen/src/test/java/org/apache/empire/db/examples/codegen/ValidatePluginRunTest.java ---------------------------------------------------------------------- diff --git a/empire-db-examples/empire-db-example-codegen/src/test/java/org/apache/empire/db/examples/codegen/ValidatePluginRunTest.java b/empire-db-examples/empire-db-example-codegen/src/test/java/org/apache/empire/db/examples/codegen/ValidatePluginRunTest.java index b088735..f3506e9 100644 --- a/empire-db-examples/empire-db-example-codegen/src/test/java/org/apache/empire/db/examples/codegen/ValidatePluginRunTest.java +++ b/empire-db-examples/empire-db-example-codegen/src/test/java/org/apache/empire/db/examples/codegen/ValidatePluginRunTest.java @@ -31,7 +31,7 @@ import java.sql.Statement; import org.apache.empire.db.DBCommand; import org.apache.empire.db.DBDatabaseDriver; import org.apache.empire.db.DBReader; -import org.apache.empire.db.example.MyDB; +import org.apache.empire.db.example.MyDatabase; import org.apache.empire.db.example.tables.Employees; import org.apache.empire.db.hsql.DBDatabaseDriverHSql; import org.junit.AfterClass; @@ -75,32 +75,36 @@ public class ValidatePluginRunTest { assertNotNull("Could not load generated class.", cls); } - @Test - public void useGeneratedCode() throws Exception { + @Test + public void useGeneratedCode() throws Exception { - MyDB db = MyDB.get(); - Employees EMP = db.EMPLOYEES; + System.out.println("Opening database..."); + DBDatabaseDriver driver = new DBDatabaseDriverHSql(); + MyDatabase db = MyDatabase.get(); + db.open(driver, conn); - DBDatabaseDriver driver = new DBDatabaseDriverHSql(); - db.open(driver, conn); - DBCommand cmd = db.createCommand(); - cmd.select(EMP.EMPLOYEE_ID, EMP.FIRSTNAME); + System.out.println("Createing query command..."); + Employees EMP = db.EMPLOYEES; + DBCommand cmd = db.createCommand(); + cmd.select(EMP.EMPLOYEE_ID, EMP.FIRSTNAME); - int rowCount = 0; - DBReader reader = new DBReader(); - try { - System.err.println(cmd.getSelect()); - reader.open(cmd, conn); - while (reader.moveNext()) { - rowCount++; - System.out.println(reader.getString(EMP.EMPLOYEE_ID) + "\t" + reader.getString(EMP.FIRSTNAME)); - } - } finally { - reader.close(); - } - - assertEquals("We expect 3 rows", 3, rowCount); - - } + int rowCount = 0; + DBReader reader = new DBReader(); + try { + System.out.println("Executing query:"); + System.err.println(cmd.getSelect()); + reader.open(cmd, conn); + System.out.println("Reading results:"); + while (reader.moveNext()) { + rowCount++; + System.out.println(reader.getString(EMP.EMPLOYEE_ID) + "\t" + reader.getString(EMP.FIRSTNAME)); + } + System.out.println("Result contained "+String.valueOf(rowCount)+" records"); + } finally { + reader.close(); + } + + assertEquals("We expect 3 rows", 3, rowCount); + } } http://git-wip-us.apache.org/repos/asf/empire-db/blob/6bcd642f/empire-db-maven-plugin/src/main/java/org/apache/empire/db/maven/CodeGenMojo.java ---------------------------------------------------------------------- diff --git a/empire-db-maven-plugin/src/main/java/org/apache/empire/db/maven/CodeGenMojo.java b/empire-db-maven-plugin/src/main/java/org/apache/empire/db/maven/CodeGenMojo.java index 20673f3..80e7512 100644 --- a/empire-db-maven-plugin/src/main/java/org/apache/empire/db/maven/CodeGenMojo.java +++ b/empire-db-maven-plugin/src/main/java/org/apache/empire/db/maven/CodeGenMojo.java @@ -24,14 +24,20 @@ import org.apache.empire.db.DBDatabase; import org.apache.empire.db.codegen.CodeGenConfig; import org.apache.empire.db.codegen.CodeGenParser; import org.apache.empire.db.codegen.CodeGenWriter; +import org.apache.empire.exceptions.InvalidPropertyException; import org.apache.log4j.AppenderSkeleton; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.apache.log4j.spi.LoggingEvent; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; -import org.apache.maven.plugins.annotations.*; +import org.apache.maven.plugins.annotations.Component; +import org.apache.maven.plugins.annotations.LifecyclePhase; +import org.apache.maven.plugins.annotations.Mojo; +import org.apache.maven.plugins.annotations.Parameter; +import org.apache.maven.plugins.annotations.ResolutionScope; import org.apache.maven.project.MavenProject; +import org.codehaus.plexus.util.StringUtils; /** * Empire-DB Code generation by reading an existing database schema @@ -55,19 +61,19 @@ public class CodeGenMojo extends AbstractMojo { /** * Location of the generated sources. */ - @Parameter(defaultValue = "${project.build.directory}/generated-sources/empiredb", property = "empiredb.generatedsources", required = true) + @Parameter(defaultValue = "${project.build.directory}/generated-sources/java", property = "empiredb.generatedsources", required = true) private File targetDirectory; /** * JDBC url */ - @Parameter(property = "empiredb.jdbcURL", required = true) + @Parameter(property = "empiredb.jdbcURL") private String jdbcURL; /** * JDBC Driver class */ - @Parameter(property = "empiredb.jdbcClass", required = true) + @Parameter(property = "empiredb.jdbcClass") private String jdbcClass; /** @@ -94,8 +100,30 @@ public class CodeGenMojo extends AbstractMojo { */ @Parameter(property = "empiredb.packageName") private String packageName; + + /** + * The name of the generated Database class + */ + @Parameter(property = "empiredb.dbClassName") + private String dbClassName; - public void execute() throws MojoExecutionException + @Parameter(property = "empiredb.nestTables") + private boolean nestTables = false; + + @Parameter(property = "empiredb.nestViews") + private boolean nestViews = false; + + @Parameter(property = "empiredb.createRecordProperties") + private boolean createRecordProperties = false; + + @Parameter(property = "empiredb.preserverCharacterCase") + private boolean preserverCharacterCase = false; + + @Parameter(property = "empiredb.preserveRelationNames") + private boolean preserveRelationNames = false; + + @Override + public void execute() throws MojoExecutionException { setupLogging(); @@ -105,9 +133,16 @@ public class CodeGenMojo extends AbstractMojo { { getLog().info("Loading configuration file: " + configFile); config.init(configFile.getAbsolutePath()); + targetDirectory = new File(config.getTargetFolder()); } else { + if (StringUtils.isEmpty(jdbcURL) || + StringUtils.isEmpty(jdbcClass)) + { // Missing + throw new InvalidPropertyException("jdbcURL|jdbcClass", null); + } + config.setJdbcURL(jdbcURL); config.setJdbcClass(jdbcClass); config.setJdbcUser(jdbcUser); @@ -115,6 +150,12 @@ public class CodeGenMojo extends AbstractMojo { config.setTargetFolder(targetDirectory.getAbsolutePath()); config.setTemplateFolder(templateDirectory); config.setPackageName(packageName); + config.setDbClassName(dbClassName); + config.setNestTables(nestTables); + config.setNestViews(nestViews); + config.setCreateRecordProperties(createRecordProperties); + config.setPreserverCharacterCase(preserverCharacterCase); + config.setPreserveRelationNames(preserveRelationNames); } //config.setExceptionsEnabled(true); @@ -132,9 +173,13 @@ public class CodeGenMojo extends AbstractMojo { // we want the generate sources to be available in the project itself if (project != null && targetDirectory != null && targetDirectory.exists()) { + getLog().info("Adding Compile Source Folder: " + targetDirectory); project.addCompileSourceRoot(targetDirectory.getAbsolutePath()); } - + else if (targetDirectory!=null) + { + getLog().warn("Target Source Folder does not exist: " + targetDirectory); + } } private void setupLogging()
