You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@empire-db.apache.org by do...@apache.org on 2022/02/24 16:28:28 UTC

[empire-db] branch master updated: EMPIREDB-362 codegen improvement

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 <do...@apache.org>
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/