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/

Reply via email to