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 fr...@apache.org on 2010/04/11 20:15:22 UTC
svn commit: r932968 - in /incubator/empire-db/trunk/empire-db-codegen: ./
src/main/java/org/apache/empire/db/codegen/
src/test/java/org/apache/empire/db/codegen/ src/test/resources/
src/test/resources/hsqldb/
Author: francisdb
Date: Sun Apr 11 18:15:22 2010
New Revision: 932968
URL: http://svn.apache.org/viewvc?rev=932968&view=rev
Log:
fail fast in the codegen if the template folder does not exist or is not readable
Added:
incubator/empire-db/trunk/empire-db-codegen/src/test/java/org/apache/empire/db/codegen/CodeGenAppTest.java
incubator/empire-db/trunk/empire-db-codegen/src/test/resources/hsqldb/
incubator/empire-db/trunk/empire-db-codegen/src/test/resources/hsqldb/sample.properties
incubator/empire-db/trunk/empire-db-codegen/src/test/resources/hsqldb/sample.script
incubator/empire-db/trunk/empire-db-codegen/src/test/resources/testconfig_invalid_template_folder.xml
incubator/empire-db/trunk/empire-db-codegen/src/test/resources/testconfig_using_template_folder.xml
Modified:
incubator/empire-db/trunk/empire-db-codegen/pom.xml
incubator/empire-db/trunk/empire-db-codegen/src/main/java/org/apache/empire/db/codegen/CodeGenWriter.java
incubator/empire-db/trunk/empire-db-codegen/src/test/resources/testconfig.xml
Modified: incubator/empire-db/trunk/empire-db-codegen/pom.xml
URL: http://svn.apache.org/viewvc/incubator/empire-db/trunk/empire-db-codegen/pom.xml?rev=932968&r1=932967&r2=932968&view=diff
==============================================================================
--- incubator/empire-db/trunk/empire-db-codegen/pom.xml (original)
+++ incubator/empire-db/trunk/empire-db-codegen/pom.xml Sun Apr 11 18:15:22 2010
@@ -37,7 +37,7 @@
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
- <version>1.6.2</version>
+ <version>1.6.3</version>
</dependency>
<!-- Databases -->
Modified: incubator/empire-db/trunk/empire-db-codegen/src/main/java/org/apache/empire/db/codegen/CodeGenWriter.java
URL: http://svn.apache.org/viewvc/incubator/empire-db/trunk/empire-db-codegen/src/main/java/org/apache/empire/db/codegen/CodeGenWriter.java?rev=932968&r1=932967&r2=932968&view=diff
==============================================================================
--- incubator/empire-db/trunk/empire-db-codegen/src/main/java/org/apache/empire/db/codegen/CodeGenWriter.java (original)
+++ incubator/empire-db/trunk/empire-db-codegen/src/main/java/org/apache/empire/db/codegen/CodeGenWriter.java Sun Apr 11 18:15:22 2010
@@ -33,7 +33,6 @@ import org.apache.empire.db.DBView;
import org.apache.empire.db.codegen.util.FileUtils;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
-import org.apache.velocity.app.Velocity;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.exception.ParseErrorException;
import org.apache.velocity.exception.ResourceNotFoundException;
@@ -78,7 +77,8 @@ public class CodeGenWriter {
// Services
private final WriterService writerService;
-
+ private final VelocityEngine engine;
+
// Properties
private final CodeGenConfig config;
private File baseDir;
@@ -92,17 +92,23 @@ public class CodeGenWriter {
public CodeGenWriter(CodeGenConfig config) {
this.writerService = new WriterService(config);
this.config = config;
+ this.engine = new VelocityEngine();
// we have to keep this in sync with our logging system
// http://velocity.apache.org/engine/releases/velocity-1.5/developer-guide.html#simpleexampleofacustomlogger
- Velocity.setProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM,
+ engine.setProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM,
new CommonsLogLogChute());
if(useClasspathTemplates()){
- Velocity.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath");
- Velocity.setProperty("classpath." + VelocityEngine.RESOURCE_LOADER + ".class", ClasspathResourceLoader.class.getName());
- }
+ engine.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath");
+ engine.setProperty("classpath." + VelocityEngine.RESOURCE_LOADER + ".class", ClasspathResourceLoader.class.getName());
+ }else{
+ File templateFolder = new File(config.getTemplateFolder());
+ if(!templateFolder.canRead()){
+ throw new RuntimeException("Provided template folder missing or not readable: " + config.getTemplateFolder());
+ }
+ }
try {
- Velocity.init();
+ engine.init();
} catch (Exception e) {
log.fatal(e);
throw new RuntimeException(e);
@@ -298,7 +304,7 @@ public class CodeGenWriter {
Writer writer = null;
try {
log.info("Writing " + file);
- Template velocityTemplate = Velocity.getTemplate(templatePath);
+ Template velocityTemplate = engine.getTemplate(templatePath);
writer = new FileWriter(file);
velocityTemplate.merge(context, writer);
} catch (IOException e) {
Added: incubator/empire-db/trunk/empire-db-codegen/src/test/java/org/apache/empire/db/codegen/CodeGenAppTest.java
URL: http://svn.apache.org/viewvc/incubator/empire-db/trunk/empire-db-codegen/src/test/java/org/apache/empire/db/codegen/CodeGenAppTest.java?rev=932968&view=auto
==============================================================================
--- incubator/empire-db/trunk/empire-db-codegen/src/test/java/org/apache/empire/db/codegen/CodeGenAppTest.java (added)
+++ incubator/empire-db/trunk/empire-db-codegen/src/test/java/org/apache/empire/db/codegen/CodeGenAppTest.java Sun Apr 11 18:15:22 2010
@@ -0,0 +1,61 @@
+package org.apache.empire.db.codegen;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.empire.db.codegen.util.FileUtils;
+import org.junit.Before;
+import org.junit.Test;
+
+public class CodeGenAppTest {
+
+ @Before
+ public void cleanup() throws IOException{
+ File generated = new File("target/generated");
+ if(generated.exists()){
+ boolean deleted = FileUtils.deleteDirectory(generated);
+ if(!deleted){
+ throw new IOException("Could not delete previously generated sources");
+ }
+ }
+ }
+
+ @Test
+ public void testMain() {
+ String[] args = new String[]{"src/test/resources/testconfig.xml"};
+
+ // execute app
+ CodeGenApp.main(args);
+
+ // expected files
+ File expected = new File("target/generated/dbsample/org/apache/empire/db/samples/dbsample/SampleDB.java");
+ assertTrue("missing generated code", expected.exists());
+ }
+
+ @Test
+ public void testMainUsingTemplateFolder() {
+ String[] args = new String[]{"src/test/resources/testconfig_using_template_folder.xml"};
+
+ // execute app
+ CodeGenApp.main(args);
+
+ // expected files
+ File expected = new File("target/generated/dbsample/org/apache/empire/db/samples/dbsample/SampleDB.java");
+ assertTrue("missing generated code", expected.exists());
+ }
+
+ @Test
+ public void testMainFailInvalidTemplateFolder() {
+ String[] args = new String[]{"src/test/resources/testconfig_invalid_template_folder.xml"};
+ try{
+ CodeGenApp.main(args);
+ fail("This should fail as the template path is missing");
+ }catch(RuntimeException ex){
+ assertTrue("Wrong message", ex.getMessage().startsWith("Provided template folder missing or not readable:"));
+ }
+ }
+
+}
Added: incubator/empire-db/trunk/empire-db-codegen/src/test/resources/hsqldb/sample.properties
URL: http://svn.apache.org/viewvc/incubator/empire-db/trunk/empire-db-codegen/src/test/resources/hsqldb/sample.properties?rev=932968&view=auto
==============================================================================
--- incubator/empire-db/trunk/empire-db-codegen/src/test/resources/hsqldb/sample.properties (added)
+++ incubator/empire-db/trunk/empire-db-codegen/src/test/resources/hsqldb/sample.properties Sun Apr 11 18:15:22 2010
@@ -0,0 +1,35 @@
+# 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.
+#
+#HSQL Database Engine 1.8.0.10
+#Tue Feb 02 00:26:54 CET 2010
+hsqldb.script_format=0
+runtime.gc_interval=0
+sql.enforce_strict_size=false
+hsqldb.cache_size_scale=8
+readonly=false
+hsqldb.nio_data_file=true
+hsqldb.cache_scale=14
+version=1.8.0
+hsqldb.default_table_type=memory
+hsqldb.cache_file_scale=1
+hsqldb.log_size=200
+modified=no
+hsqldb.cache_version=1.7.0
+hsqldb.original_version=1.8.0
+hsqldb.compatible_version=1.8.0
+hsqldb.files_readonly=true
Added: incubator/empire-db/trunk/empire-db-codegen/src/test/resources/hsqldb/sample.script
URL: http://svn.apache.org/viewvc/incubator/empire-db/trunk/empire-db-codegen/src/test/resources/hsqldb/sample.script?rev=932968&view=auto
==============================================================================
--- incubator/empire-db/trunk/empire-db-codegen/src/test/resources/hsqldb/sample.script (added)
+++ incubator/empire-db/trunk/empire-db-codegen/src/test/resources/hsqldb/sample.script Sun Apr 11 18:15:22 2010
@@ -0,0 +1,33 @@
+-- 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.
+
+CREATE SCHEMA PUBLIC AUTHORIZATION DBA
+CREATE SEQUENCE DEP_ID_SEQUENCE AS INTEGER START WITH 3
+CREATE SEQUENCE EMPLOYEE_ID_SEQUENCE AS INTEGER START WITH 4
+CREATE MEMORY TABLE DEPARTMENTS(DEPARTMENT_ID BIGINT NOT NULL,NAME VARCHAR(80) NOT NULL,HEAD VARCHAR(80),BUSINESS_UNIT VARCHAR(4) NOT NULL,UPDATE_TIMESTAMP TIMESTAMP NOT NULL,CONSTRAINT DEPARTMENTS_PK PRIMARY KEY(DEPARTMENT_ID))
+CREATE UNIQUE INDEX DEARTMENT_NAME_IDX ON DEPARTMENTS(NAME)
+CREATE MEMORY TABLE EMPLOYEES(EMPLOYEE_ID BIGINT NOT NULL,SALUTATION VARCHAR(20),FIRSTNAME VARCHAR(40) NOT NULL,LASTNAME VARCHAR(40) NOT NULL,DATE_OF_BIRTH DATE,DEPARTMENT_ID BIGINT NOT NULL,GENDER VARCHAR(1),PHONE_NUMBER VARCHAR(40),EMAIL VARCHAR(80),SALARY DECIMAL(10,2),RETIRED BOOLEAN NOT NULL,UPDATE_TIMESTAMP TIMESTAMP NOT NULL,CONSTRAINT EMPLOYEES_PK PRIMARY KEY(EMPLOYEE_ID),CONSTRAINT EMPLOYEES_DEPARTMENT_I_FK FOREIGN KEY(DEPARTMENT_ID) REFERENCES DEPARTMENTS(DEPARTMENT_ID))
+CREATE UNIQUE INDEX EMPLOYEE_NAME_IDX ON EMPLOYEES(FIRSTNAME,LASTNAME,DATE_OF_BIRTH)
+CREATE USER SA PASSWORD ""
+GRANT DBA TO SA
+SET WRITE_DELAY 10
+SET SCHEMA PUBLIC
+INSERT INTO DEPARTMENTS VALUES(1,'Development',NULL,'ITTK','2010-02-01 22:27:44.200000000')
+INSERT INTO DEPARTMENTS VALUES(2,'Sales',NULL,'ITTK','2010-02-01 22:27:44.212000000')
+INSERT INTO EMPLOYEES VALUES(1,NULL,'Peter','Sharp',NULL,1,'M','+49-7531-457160',NULL,NULL,FALSE,'2010-02-01 22:27:44.226000000')
+INSERT INTO EMPLOYEES VALUES(2,NULL,'Fred','Bloggs',NULL,1,'M','+49-5555-505050',NULL,NULL,FALSE,'2010-02-01 22:27:44.240000000')
+INSERT INTO EMPLOYEES VALUES(3,NULL,'Emma','White',NULL,2,'F','+49-040-125486',NULL,NULL,FALSE,'2010-02-01 22:27:44.243000000')
Modified: incubator/empire-db/trunk/empire-db-codegen/src/test/resources/testconfig.xml
URL: http://svn.apache.org/viewvc/incubator/empire-db/trunk/empire-db-codegen/src/test/resources/testconfig.xml?rev=932968&r1=932967&r2=932968&view=diff
==============================================================================
--- incubator/empire-db/trunk/empire-db-codegen/src/test/resources/testconfig.xml (original)
+++ incubator/empire-db/trunk/empire-db-codegen/src/test/resources/testconfig.xml Sun Apr 11 18:15:22 2010
@@ -21,11 +21,12 @@
<properties>
<!-- provider name must match the property-section containing the connection data -->
- <jdbcClass>oracle.jdbc.driver.OracleDriver</jdbcClass>
- <jdbcURL>jdbc:oracle:thin:@192.168.0.2:1521:ora10</jdbcURL>
- <jdbcUser>DBSAMPLE</jdbcUser>
- <jdbcPwd>DBSAMPLE</jdbcPwd>
-
+ <jdbcClass>org.hsqldb.jdbcDriver</jdbcClass>
+ <jdbcURL>jdbc:hsqldb:file:src/test/resources/hsqldb/sample;shutdown=true</jdbcURL>
+ <jdbcUser>sa</jdbcUser>
+ <jdbcPwd></jdbcPwd>
+ <packageName>org.apache.empire.db.example</packageName>
+
<!-- Schema options -->
<dbCatalog></dbCatalog>
<dbSchema>DBSAMPLE</dbSchema>
@@ -42,8 +43,8 @@
<tableClassPrefix>T</tableClassPrefix>
<tableClassSuffix>Table</tableClassSuffix>
<viewClassPrefix>V</viewClassPrefix>
- <nestTables>True</nestTables>
- <nestViews>False</nestViews>
+ <nestTables>true</nestTables>
+ <nestViews>false</nestViews>
<createRecordProperties>true</createRecordProperties>
</properties>
Added: incubator/empire-db/trunk/empire-db-codegen/src/test/resources/testconfig_invalid_template_folder.xml
URL: http://svn.apache.org/viewvc/incubator/empire-db/trunk/empire-db-codegen/src/test/resources/testconfig_invalid_template_folder.xml?rev=932968&view=auto
==============================================================================
--- incubator/empire-db/trunk/empire-db-codegen/src/test/resources/testconfig_invalid_template_folder.xml (added)
+++ incubator/empire-db/trunk/empire-db-codegen/src/test/resources/testconfig_invalid_template_folder.xml Sun Apr 11 18:15:22 2010
@@ -0,0 +1,75 @@
+<?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>
+ <packageName>org.apache.empire.db.example</packageName>
+
+ <!-- Schema options -->
+ <dbCatalog></dbCatalog>
+ <dbSchema>DBSAMPLE</dbSchema>
+ <dbTablePattern></dbTablePattern>
+ <timestampColumn>CREATIONDATE</timestampColumn>
+
+ <!-- generation options -->
+ <templateFolder>i/do/not/exist</templateFolder>
+ <targetFolder>target/generated/dbsample</targetFolder>
+ <packageName>org.apache.empire.db.samples.dbsample</packageName>
+ <dbClassName>SampleDB</dbClassName>
+ <tableBaseName>SampleTable</tableBaseName>
+ <viewBaseName>SampleView</viewBaseName>
+ <recordBaseName>SampleRecord</recordBaseName>
+ <tableClassPrefix>T</tableClassPrefix>
+ <tableClassSuffix>Table</tableClassSuffix>
+ <viewClassPrefix>V</viewClassPrefix>
+ <nestTables>true</nestTables>
+ <nestViews>false</nestViews>
+ <createRecordProperties>true</createRecordProperties>
+ </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>
Added: incubator/empire-db/trunk/empire-db-codegen/src/test/resources/testconfig_using_template_folder.xml
URL: http://svn.apache.org/viewvc/incubator/empire-db/trunk/empire-db-codegen/src/test/resources/testconfig_using_template_folder.xml?rev=932968&view=auto
==============================================================================
--- incubator/empire-db/trunk/empire-db-codegen/src/test/resources/testconfig_using_template_folder.xml (added)
+++ incubator/empire-db/trunk/empire-db-codegen/src/test/resources/testconfig_using_template_folder.xml Sun Apr 11 18:15:22 2010
@@ -0,0 +1,75 @@
+<?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>
+ <packageName>org.apache.empire.db.example</packageName>
+
+ <!-- Schema options -->
+ <dbCatalog></dbCatalog>
+ <dbSchema>DBSAMPLE</dbSchema>
+ <dbTablePattern></dbTablePattern>
+ <timestampColumn>CREATIONDATE</timestampColumn>
+
+ <!-- generation options -->
+ <templateFolder>src/main/resources/templates</templateFolder>
+ <targetFolder>target/generated/dbsample</targetFolder>
+ <packageName>org.apache.empire.db.samples.dbsample</packageName>
+ <dbClassName>SampleDB</dbClassName>
+ <tableBaseName>SampleTable</tableBaseName>
+ <viewBaseName>SampleView</viewBaseName>
+ <recordBaseName>SampleRecord</recordBaseName>
+ <tableClassPrefix>T</tableClassPrefix>
+ <tableClassSuffix>Table</tableClassSuffix>
+ <viewClassPrefix>V</viewClassPrefix>
+ <nestTables>true</nestTables>
+ <nestViews>false</nestViews>
+ <createRecordProperties>true</createRecordProperties>
+ </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>