This is an automated email from the ASF dual-hosted git repository.
doebele pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/empire-db.git
The following commit(s) were added to refs/heads/master by this push:
new e1829f5 EMPIREDB-362 codegen improvement
e1829f5 is described below
commit e1829f5644c0f79d780ed3592ebcb17bc39c8ead
Author: Rainer Döbele <[email protected]>
AuthorDate: Thu Feb 24 17:28:25 2022 +0100
EMPIREDB-362 codegen improvement
---
.../apache/empire/db/codegen/CodeGenConfig.java | 4 +
.../apache/empire/db/codegen/CodeGenWriter.java | 6 +-
.../src/main/resources/templates/BaseRecord.vm | 22 +++--
.../src/main/resources/templates/BaseTable.vm | 27 +++++-
.../src/main/resources/templates/BaseView.vm | 16 +++-
.../src/main/resources/templates/Record.vm | 9 +-
.../empire-db-example-codegen/generate-example.xml | 97 ++++++++++++++++++++++
.../src/main/java/GenerateExample.java | 2 +-
.../src/main/java/org/apache/empire/db/.gitignore | 1 -
9 files changed, 163 insertions(+), 21 deletions(-)
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 848cbf2..ff747ef 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
@@ -385,6 +385,10 @@ public class CodeGenConfig extends XMLConfiguration {
}
public String getTablePackageName() {
+ // Not for nested tables
+ if (isNestTables())
+ return packageName;
+ // tablePackageName
return fallback(tablePackageName, "tables");
}
diff --git
a/empire-db-codegen/src/main/java/org/apache/empire/db/codegen/CodeGenWriter.java
b/empire-db-codegen/src/main/java/org/apache/empire/db/codegen/CodeGenWriter.java
index 220b06d..5e4de8d 100644
---
a/empire-db-codegen/src/main/java/org/apache/empire/db/codegen/CodeGenWriter.java
+++
b/empire-db-codegen/src/main/java/org/apache/empire/db/codegen/CodeGenWriter.java
@@ -229,10 +229,12 @@ public class CodeGenWriter {
}
private File createBaseTableClass(DBDatabase db) {
- File file = new File(tableDir, config.getTableBaseName() +
".java");
+ File file = new File(config.isNestTables() ? baseDir :
tableDir, config.getTableBaseName() + ".java");
VelocityContext context = new VelocityContext();
+ context.put("basePackageName", config.getPackageName());
context.put("tablePackageName", config.getTablePackageName());
context.put("baseTableClassName", config.getTableBaseName());
+ context.put("dbClassName", config.getDbClassName());
writeFile(file, BASE_TABLE_TEMPLATE, context);
return file;
}
@@ -255,8 +257,10 @@ public class CodeGenWriter {
private File createBaseViewClass(DBDatabase db) {
File file = new File(viewDir, config.getViewBaseName() +
".java");
VelocityContext context = new VelocityContext();
+ context.put("basePackageName", config.getPackageName());
context.put("viewPackageName", config.getViewPackageName());
context.put("baseViewClassName", config.getViewBaseName());
+ context.put("dbClassName", config.getDbClassName());
writeFile(file, BASE_VIEW_TEMPLATE, context);
return file;
}
diff --git a/empire-db-codegen/src/main/resources/templates/BaseRecord.vm
b/empire-db-codegen/src/main/resources/templates/BaseRecord.vm
index b23f7e4..913f559 100644
--- a/empire-db-codegen/src/main/resources/templates/BaseRecord.vm
+++ b/empire-db-codegen/src/main/resources/templates/BaseRecord.vm
@@ -18,6 +18,7 @@
*#
package ${recordPackageName};
+import org.apache.empire.db.DBContext;
import org.apache.empire.db.DBRecord;
#if($baseTableClassName.equals('DBTable'))
import org.apache.empire.db.DBTable;
@@ -29,16 +30,21 @@ public abstract class ${baseRecordClassName}<T extends
${baseTableClassName}> ex
private static final long serialVersionUID = 1L;
- public ${baseRecordClassName}(T table) {
- super(table);
+ public final T T; // provide access to RowSet via T
+
+ public ${baseRecordClassName}(DBContext context, T rowset) {
+ super(context, rowset);
+ // set the RowSet for quick access
+ this.T = rowset;
}
/**
- * Returns the table this record is based upon.
- * @return The table this record is based upon.
+ * Returns the RowSet this record is based upon.
+ * @return The RowSet this record is based upon.
*/
- @SuppressWarnings("unchecked")
- public T getTable() {
- return (T)super.getRowSet();
- }
+ @Override
+ public T getRowSet()
+ {
+ return this.T;
+ }
}
\ No newline at end of file
diff --git a/empire-db-codegen/src/main/resources/templates/BaseTable.vm
b/empire-db-codegen/src/main/resources/templates/BaseTable.vm
index 83e090c..c92f9bf 100644
--- a/empire-db-codegen/src/main/resources/templates/BaseTable.vm
+++ b/empire-db-codegen/src/main/resources/templates/BaseTable.vm
@@ -18,14 +18,33 @@
*#
package $tablePackageName;
-import org.apache.empire.db.DBDatabase;
import org.apache.empire.db.DBTable;
+import ${basePackageName}.${dbClassName};
public class ${baseTableClassName} extends DBTable {
private static final long serialVersionUID = 1L;
- public ${baseTableClassName}(String name, DBDatabase db) {
- super(name, db);
- }
+ public final ${dbClassName} DB;
+
+ public ${baseTableClassName}(String name, ${dbClassName} db, String alias)
{
+ super(name, db, alias);
+ // set database
+ this.DB = db;
+ }
+
+ public ${baseTableClassName}(String name, ${dbClassName} db) {
+ super(name, db);
+ // set type
+ this.DB = db;
+ }
+
+ /**
+ * returns the database
+ */
+ @Override
+ public final ${dbClassName} getDatabase() {
+ return this.DB;
+ }
+
}
diff --git a/empire-db-codegen/src/main/resources/templates/BaseView.vm
b/empire-db-codegen/src/main/resources/templates/BaseView.vm
index c6c934f..53bf5e3 100644
--- a/empire-db-codegen/src/main/resources/templates/BaseView.vm
+++ b/empire-db-codegen/src/main/resources/templates/BaseView.vm
@@ -18,14 +18,26 @@
*#
package $viewPackageName;
-import org.apache.empire.db.DBDatabase;
import org.apache.empire.db.DBView;
+import ${basePackageName}.${dbClassName};
public abstract class ${baseViewClassName} extends DBView {
private static final long serialVersionUID = 1L;
- public ${baseViewClassName}(String name, DBDatabase db) {
+ public final ${dbClassName} DB;
+
+ public ${baseViewClassName}(String name, ${dbClassName} db) {
super(name, db);
+ // set database
+ this.DB = db;
}
+
+ /**
+ * returns the database
+ */
+ @Override
+ public final ${dbClassName} getDatabase() {
+ return this.DB;
+ }
}
diff --git a/empire-db-codegen/src/main/resources/templates/Record.vm
b/empire-db-codegen/src/main/resources/templates/Record.vm
index a559404..2bf6bd6 100644
--- a/empire-db-codegen/src/main/resources/templates/Record.vm
+++ b/empire-db-codegen/src/main/resources/templates/Record.vm
@@ -26,6 +26,7 @@ import java.math.BigDecimal;
import java.util.Date;
#end
+import org.apache.empire.db.DBContext;
import ${basePackageName}.${dbClassName};
import ${recordPackageName}.${baseRecordClassName};
import ${tablePackageName}.$parser.getTableClassName($table.name);
@@ -45,8 +46,8 @@ public class $parser.getRecordClassName($table.name) extends
${baseRecordClassNa
private static final long serialVersionUID = 1L;
- public $parser.getRecordClassName($table.name)() {
- super(${dbClassName}.get().$parser.getTableName($table));
+ public $parser.getRecordClassName($table.name)(DBContext context) {
+ super(context,
${dbClassName}.get().$parser.getTableName($table));
}
#if($createRecordProperties == true)
@@ -54,10 +55,10 @@ public class $parser.getRecordClassName($table.name)
extends ${baseRecordClassNa
#foreach($col in $table.columns)
public $parser.getJavaType($col).getCanonicalName()
$parser.getAccessorName($col)() {
- return
($parser.getJavaType($col).getCanonicalName())super.getValue(getTable().${parser.getColumnName($col)});
+ return
($parser.getJavaType($col).getCanonicalName())super.get(T.${parser.getColumnName($col)});
}
public void
$parser.getMutatorName($col)($parser.getJavaType($col).getCanonicalName() val) {
- super.setValue(getTable().${parser.getColumnName($col)}, val);
+ super.set(T.${parser.getColumnName($col)}, val);
}
#end
#end
diff --git a/empire-db-examples/empire-db-example-codegen/generate-example.xml
b/empire-db-examples/empire-db-example-codegen/generate-example.xml
new file mode 100644
index 0000000..229913c
--- /dev/null
+++ b/empire-db-examples/empire-db-example-codegen/generate-example.xml
@@ -0,0 +1,97 @@
+<?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.jdbc.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>UPDATE_TIMESTAMP</timestampColumn>
+
+ <!-- generation options -->
+ <!--
+ <targetFolder>target/generated-sources/java</targetFolder>
+ -->
+ <targetFolder>src/main/java</targetFolder>
+ <packageName>org.apache.empire.example.db</packageName>
+ <dbClassName>CarSalesDB</dbClassName>
+ <nestTables>true</nestTables>
+ <nestViews>false</nestViews>
+ <createRecordProperties>true</createRecordProperties>
+ <preserverCharacterCase>false</preserverCharacterCase>
+ <preserveRelationNames>false</preserveRelationNames>
+
+ <!-- generation options (optional) -->
+ <tablePackageName></tablePackageName>
+ <viewPackageName></viewPackageName>
+ <recordPackageName></recordPackageName>
+ <tableBaseName>CSTable</tableBaseName>
+ <viewBaseName>CSView</viewBaseName>
+ <recordBaseName>CSRecord</recordBaseName>
+ <tableNamePrefix></tableNamePrefix>
+ <tableClassPrefix></tableClassPrefix>
+ <tableClassSuffix></tableClassSuffix>
+ <viewNamePrefix></viewNamePrefix>
+ <viewClassPrefix></viewClassPrefix>
+ <viewClassSuffix></viewClassSuffix>
+ <columnNamePrefix></columnNamePrefix>
+
+ </properties>
+
+ <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+ <!-- Console -->
+ <appender name="default"
class="org.apache.log4j.ConsoleAppender">
+ <layout class="org.apache.log4j.PatternLayout">
+ <param name="ConversionPattern" value="%-5p
[%d{yyyy/MM/dd HH:mm}]: %m at %l %n"/>
+ </layout>
+ </appender>
+
+ <!-- File output -->
+ <appender name="logfile" class="org.apache.log4j.FileAppender">
+ <param name="file" value="target/codegen.log" />
+ <param name="append" value="false" />
+ <param name="threshold" value="debug" />
+ <layout class="org.apache.log4j.PatternLayout">
+ <param name="ConversionPattern" value=" %-5p %d{ISO8601}
[%c{1}] - %m%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>
diff --git
a/empire-db-examples/empire-db-example-codegen/src/main/java/GenerateExample.java
b/empire-db-examples/empire-db-example-codegen/src/main/java/GenerateExample.java
index 0df5f5e..b758c00 100644
---
a/empire-db-examples/empire-db-example-codegen/src/main/java/GenerateExample.java
+++
b/empire-db-examples/empire-db-example-codegen/src/main/java/GenerateExample.java
@@ -16,7 +16,7 @@ public final class GenerateExample
public static void main(String[] args)
{
CodeGenConfig config = new CodeGenConfig();
- config.init("generate-config.xml");
+ config.init("generate-example.xml");
log.info("Creating code for {}", config.getJdbcURL());
diff --git
a/empire-db-examples/empire-db-example-codegen/src/main/java/org/apache/empire/db/.gitignore
b/empire-db-examples/empire-db-example-codegen/src/main/java/org/apache/empire/db/.gitignore
deleted file mode 100644
index 3bde5c3..0000000
---
a/empire-db-examples/empire-db-example-codegen/src/main/java/org/apache/empire/db/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/example/