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 2015/08/06 13:26:21 UTC

[3/3] empire-db git commit: prepare release 2.4.4

prepare release 2.4.4

Project: http://git-wip-us.apache.org/repos/asf/empire-db/repo
Commit: http://git-wip-us.apache.org/repos/asf/empire-db/commit/83302f08
Tree: http://git-wip-us.apache.org/repos/asf/empire-db/tree/83302f08
Diff: http://git-wip-us.apache.org/repos/asf/empire-db/diff/83302f08

Branch: refs/heads/master
Commit: 83302f0838c04027f034ca99d960d156a1cb16d0
Parents: 46d3e32
Author: Rainer Döbele <do...@apache.org>
Authored: Thu Aug 6 13:26:12 2015 +0200
Committer: Rainer Döbele <do...@apache.org>
Committed: Thu Aug 6 13:26:12 2015 +0200

----------------------------------------------------------------------
 CHANGELOG.txt                                   |  19 +
 empire-db-eclipse-codegen/.gitignore            |   3 +
 empire-db-eclipse-codegen/META-INF/MANIFEST.MF  |  30 +
 empire-db-eclipse-codegen/build.properties      |  30 +
 empire-db-eclipse-codegen/lib/.gitignore        |   8 +
 empire-db-eclipse-codegen/lib/readme.txt        |  24 +
 empire-db-eclipse-codegen/plugin.xml            |  76 +++
 empire-db-eclipse-codegen/pom.xml               |  86 +++
 .../apache/empire/db/eclipse/CodeGenConfig.java | 574 +++++++++++++++++++
 .../org/apache/empire/db/eclipse/Plugin.java    | 190 ++++++
 .../apache/empire/db/eclipse/PluginConsts.java  |  47 ++
 .../db/eclipse/handler/ConfigDialogHandler.java |  48 ++
 .../empire/db/eclipse/model/ConfigFile.java     |  64 +++
 .../db/eclipse/model/JdbcDriverClass.java       |  39 ++
 .../db/eclipse/service/ConfigFileService.java   |  38 ++
 .../eclipse/service/ConfigFileServiceImpl.java  | 234 ++++++++
 .../db/eclipse/service/MessageService.java      |  26 +
 .../db/eclipse/service/MessageServiceImpl.java  |  52 ++
 .../db/eclipse/ui/ClassParameterPage.java       | 272 +++++++++
 .../db/eclipse/ui/ConfigurationDialog.java      | 293 ++++++++++
 .../empire/db/eclipse/ui/DBTablesDialog.java    | 350 +++++++++++
 .../apache/empire/db/eclipse/ui/INavigator.java |  46 ++
 .../org/apache/empire/db/eclipse/ui/IPage.java  |  30 +
 .../apache/empire/db/eclipse/ui/MainPage.java   | 305 ++++++++++
 .../apache/empire/db/eclipse/ui/Navigator.java  | 145 +++++
 .../org/apache/empire/db/eclipse/ui/Page.java   |  51 ++
 .../empire/db/eclipse/ui/SchemaOptionsPage.java | 241 ++++++++
 .../db/eclipse/util/SWTResourceManager.java     | 455 +++++++++++++++
 .../src/main/resources/defaultConfig.xml        |  84 +++
 .../src/main/resources/icons/addButton.png      | Bin 0 -> 366 bytes
 .../src/main/resources/icons/check_all.gif      | Bin 0 -> 344 bytes
 .../src/main/resources/icons/db_element.gif     | Bin 0 -> 959 bytes
 .../src/main/resources/icons/deleteButton.png   | Bin 0 -> 582 bytes
 .../src/main/resources/icons/empire-db-logo.gif | Bin 0 -> 12167 bytes
 .../src/main/resources/icons/empire_db_icon.png | Bin 0 -> 581 bytes
 .../src/main/resources/icons/folder.gif         | Bin 0 -> 219 bytes
 .../src/main/resources/icons/logo.png           | Bin 0 -> 5482 bytes
 .../src/main/resources/icons/save.png           | Bin 0 -> 550 bytes
 .../src/main/resources/icons/testConnection.gif | Bin 0 -> 920 bytes
 .../src/main/resources/icons/uncheck_all.gif    | Bin 0 -> 148 bytes
 .../main/resources/lang/messages_en.properties  | 141 +++++
 .../src/main/resources/templates/BaseRecord.vm  |  41 ++
 .../src/main/resources/templates/BaseTable.vm   |  31 +
 .../src/main/resources/templates/BaseView.vm    |  31 +
 .../src/main/resources/templates/Database.vm    | 136 +++++
 .../src/main/resources/templates/Record.vm      |  66 +++
 .../src/main/resources/templates/Table.vm       |  76 +++
 .../src/main/resources/templates/View.vm        |  68 +++
 .../empire-db-example-basic/.gitignore          |   1 +
 .../empire-db-example-basic/pom.xml             |   1 +
 .../empire-db-example-jsf2/.gitignore           |   1 +
 .../empire-db-example-struts2-cxf/.gitignore    |   1 +
 .../empire-db-example-struts2/.gitignore        |   1 +
 empire-db-examples/pom.xml                      |  10 -
 empire-db-maven-plugin/pom.xml                  |   4 +-
 pom.xml                                         |  28 +-
 56 files changed, 4482 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/empire-db/blob/83302f08/CHANGELOG.txt
----------------------------------------------------------------------
diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index 811bb52..9d53398 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -5,6 +5,25 @@ For more Information about a particular issue please visit
 https://issues.apache.org/jira/browse/EMPIREDB
 
 --------------
+Release 2.4.4:
+--------------
+** Improvement
+	EMPIREDB-221 	Allow batch execution through JDBC executeBatch
+	EMPIREDB-220 	Allow override of fraction digits on JSF input tag
+	EMPIREDB-219	Added source code for Eclipse-Code-Generation-Plugin
+	EMPIREDB-217	Consistency check for data model defintion vs deployed data model	
+
+** Bugfix
+	EMPIREDB-218	Missing reserved keywords in DBDatabaseDriverMySQL
+	EMPIREDB-216	Reserved words as colum names not correctly escaped/quoted for derby
+	EMPIREDB-215	Sequence generation and use for HSql to not agree in using toUpperCase
+	EMPIREDB-214	SQLServer - wrong 'alterColumnPhrase'
+	EMPIREDB-212	MySQL Nested Union bad syntax
+	EMPIREDB-210	Wrong Java Type in Records for BLOB Columns
+	EMPIREDB-209	Using a reserved word as a column alias in a select statement.
+	EMPIREDB-208	Decimal fields don't support scales above 9
+
+--------------
 Release 2.4.3:
 --------------
 ** Improvement

http://git-wip-us.apache.org/repos/asf/empire-db/blob/83302f08/empire-db-eclipse-codegen/.gitignore
----------------------------------------------------------------------
diff --git a/empire-db-eclipse-codegen/.gitignore b/empire-db-eclipse-codegen/.gitignore
new file mode 100644
index 0000000..ddd6d6d
--- /dev/null
+++ b/empire-db-eclipse-codegen/.gitignore
@@ -0,0 +1,3 @@
+/.settings/
+/.classpath
+/.project

http://git-wip-us.apache.org/repos/asf/empire-db/blob/83302f08/empire-db-eclipse-codegen/META-INF/MANIFEST.MF
----------------------------------------------------------------------
diff --git a/empire-db-eclipse-codegen/META-INF/MANIFEST.MF b/empire-db-eclipse-codegen/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..328a0a3
--- /dev/null
+++ b/empire-db-eclipse-codegen/META-INF/MANIFEST.MF
@@ -0,0 +1,30 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Empire-db eclipse code generator
+Bundle-SymbolicName: org.apache.empire.db.eclipse;singleton:=true
+Bundle-Version: 1.0.0
+Bundle-ClassPath: .,
+ lib/commons-beanutils-1.8.3.jar,
+ lib/commons-logging-1.1.1.jar,
+ lib/commons-io-1.4.jar,
+ lib/empire-db-2.4.3.jar,
+ lib/empire-db-codegen-2.4.3.jar,
+ lib/slf4j-api-1.6.1.jar,
+ lib/slf4j-log4j12-1.6.1.jar,
+ lib/log4j-1.2.16.jar
+Bundle-Activator: org.apache.empire.db.eclipse.Plugin
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.ui.workbench,
+ org.eclipse.swt,
+ org.eclipse.core.resources,
+ org.apache.empire.db.eclipse
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-ActivationPolicy: lazy
+Export-Package: icons,
+ lang,
+ org.apache.empire.db.eclipse,
+ org.apache.empire.db.eclipse.handler,
+ org.apache.empire.db.eclipse.service,
+ org.apache.empire.db.eclipse.ui,
+ org.apache.empire.db.eclipse.util

http://git-wip-us.apache.org/repos/asf/empire-db/blob/83302f08/empire-db-eclipse-codegen/build.properties
----------------------------------------------------------------------
diff --git a/empire-db-eclipse-codegen/build.properties b/empire-db-eclipse-codegen/build.properties
new file mode 100644
index 0000000..75ab60b
--- /dev/null
+++ b/empire-db-eclipse-codegen/build.properties
@@ -0,0 +1,30 @@
+# 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.
+bin.includes = META-INF/,\
+               plugin.xml,\
+               .,\
+			   lib/commons-beanutils-1.8.3.jar,\
+			   lib/commons-logging-1.1.1.jar,\
+			   lib/commons-io-1.4.jar,\
+			   lib/empire-db-2.4.3.jar,\
+			   lib/empire-db-codegen-2.4.3.jar,\
+			   lib/slf4j-api-1.6.1.jar,\
+			   lib/slf4j-log4j12-1.6.1.jar,\
+			   lib/log4j-1.2.16.jar,\
+               src/main/resources/
+jre.compilation.profile = J2SE-1.6
+src.includes = lib/,\
+               src/main/
+source.. = src/main/java/,\
+           src/main/resources/

http://git-wip-us.apache.org/repos/asf/empire-db/blob/83302f08/empire-db-eclipse-codegen/lib/.gitignore
----------------------------------------------------------------------
diff --git a/empire-db-eclipse-codegen/lib/.gitignore b/empire-db-eclipse-codegen/lib/.gitignore
new file mode 100644
index 0000000..156fd81
--- /dev/null
+++ b/empire-db-eclipse-codegen/lib/.gitignore
@@ -0,0 +1,8 @@
+/commons-beanutils-1.8.3.jar
+/commons-io-1.4.jar
+/commons-logging-1.1.1.jar
+/empire-db-2.4.3.jar
+/empire-db-codegen-2.4.3.jar
+/log4j-1.2.16.jar
+/slf4j-api-1.6.1.jar
+/slf4j-log4j12-1.6.1.jar

http://git-wip-us.apache.org/repos/asf/empire-db/blob/83302f08/empire-db-eclipse-codegen/lib/readme.txt
----------------------------------------------------------------------
diff --git a/empire-db-eclipse-codegen/lib/readme.txt b/empire-db-eclipse-codegen/lib/readme.txt
new file mode 100644
index 0000000..558439b
--- /dev/null
+++ b/empire-db-eclipse-codegen/lib/readme.txt
@@ -0,0 +1,24 @@
+# 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.
+
+In order to compile in Eclipse please copy the following files into this folder:
+
+ commons-beanutils-1.8.3.jar,
+ commons-logging-1.1.1.jar,
+ commons-io-1.4.jar,
+ empire-db-2.4.3.jar,
+ empire-db-codegen-2.4.3.jar,
+ slf4j-api-1.6.1.jar,
+ slf4j-log4j12-1.6.1.jar,
+ log4j-1.2.16.jar

http://git-wip-us.apache.org/repos/asf/empire-db/blob/83302f08/empire-db-eclipse-codegen/plugin.xml
----------------------------------------------------------------------
diff --git a/empire-db-eclipse-codegen/plugin.xml b/empire-db-eclipse-codegen/plugin.xml
new file mode 100644
index 0000000..9af512a
--- /dev/null
+++ b/empire-db-eclipse-codegen/plugin.xml
@@ -0,0 +1,76 @@
+<?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.
+	-->
+<?eclipse version="3.4"?>
+<plugin id="empire-db-eclipse-plugin" version="1.0.0" name="Empire-db Eclipse Plugin">
+<extension
+	point="org.eclipse.ui.handlers">
+    <handler
+    	class="org.apache.empire.db.eclipse.handler.ConfigDialogHandler"
+        commandId="codegen.commands.configDialogHandler">
+	</handler>
+</extension>
+ 
+<extension
+      point="org.eclipse.ui.menus">
+   <menuContribution
+         locationURI="popup:org.eclipse.jdt.ui.PackageExplorer">
+		<command
+            commandId="codegen.commands.configDialogHandler"
+            icon="src/main/resources/icons/empire_db_icon.png"
+            id="org.empire.codegen.menus.packageExplorer.configCommand"
+            label="EmpireDB Tool"
+            tooltip="">
+            <visibleWhen
+                  checkEnabled="false">
+               <with
+                     variable="selection">
+                  <iterate
+                        ifEmpty="false"
+                        operator="or">
+                     <instanceof
+                           value="org.eclipse.core.resources.IProject">
+                     </instanceof>
+                  </iterate>
+               </with>
+			</visibleWhen>
+      </command>
+   </menuContribution>
+   <menuContribution
+         locationURI="popup:org.eclipse.ui.navigator.ProjectExplorer#PopupMenu">
+      <command
+            commandId="codegen.commands.configDialogHandler"
+            icon="src/main/resources/icons/empire_db_icon.png"
+            id="org.empire.codegen.menus.projectExplorer.configCommand"
+            label="EmpireDB Tool"
+            tooltip="">
+            <visibleWhen
+                  checkEnabled="false">
+               <with
+                     variable="selection">
+                  <iterate
+                        ifEmpty="false"
+                        operator="or">
+                     <instanceof
+                           value="org.eclipse.core.resources.IProject">
+                     </instanceof>
+                  </iterate>
+               </with>
+			</visibleWhen>
+      	</command>
+	</menuContribution>
+</extension>
+</plugin>

http://git-wip-us.apache.org/repos/asf/empire-db/blob/83302f08/empire-db-eclipse-codegen/pom.xml
----------------------------------------------------------------------
diff --git a/empire-db-eclipse-codegen/pom.xml b/empire-db-eclipse-codegen/pom.xml
new file mode 100644
index 0000000..58cc2e3
--- /dev/null
+++ b/empire-db-eclipse-codegen/pom.xml
@@ -0,0 +1,86 @@
+<?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.
+	-->
+<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/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<artifactId>empire-db-parent</artifactId>
+		<groupId>org.apache.empire-db</groupId>
+		<version>2.4.4-SNAPSHOT</version>
+	</parent>
+	<artifactId>empire-db-eclipse-codegen</artifactId>
+	<name>Empire db eclipse codegen</name>
+	<packaging>eclipse-plugin</packaging>
+
+	<properties>
+		<tycho-version>0.16.0</tycho-version>
+	</properties>
+
+	<repositories>
+		<repository>
+			<id>luna</id>
+			<url>http://download.eclipse.org/releases/luna</url>
+			<layout>p2</layout>
+		</repository>
+	</repositories>
+
+	<dependencies>
+		<dependency>
+			<groupId>org.apache.empire-db</groupId>
+			<artifactId>empire-db</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.empire-db</groupId>
+			<artifactId>empire-db-codegen</artifactId>
+		</dependency>
+		<!-- use log4j for logging -->
+		<dependency>
+			<groupId>org.slf4j</groupId>
+			<artifactId>slf4j-api</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.slf4j</groupId>
+			<artifactId>slf4j-log4j12</artifactId>
+		</dependency>
+		<!-- commons -->
+		<dependency>
+			<groupId>commons-io</groupId>
+			<artifactId>commons-io</artifactId>
+			<version>1.4</version>
+		</dependency>
+	</dependencies>
+
+	<build>
+		<plugins>
+			<!-- Eclipse --> 
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-eclipse-plugin</artifactId> 
+				<configuration>
+					<pde>true</pde>
+				</configuration> 
+			</plugin>
+			<!-- enable tycho build extension -->
+			<plugin>
+				<groupId>org.eclipse.tycho</groupId>
+				<artifactId>tycho-maven-plugin</artifactId>
+				<version>${tycho-version}</version>
+				<extensions>true</extensions>
+			</plugin>
+		</plugins>
+	</build>
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/empire-db/blob/83302f08/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/CodeGenConfig.java
----------------------------------------------------------------------
diff --git a/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/CodeGenConfig.java b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/CodeGenConfig.java
new file mode 100644
index 0000000..e57a6c0
--- /dev/null
+++ b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/CodeGenConfig.java
@@ -0,0 +1,574 @@
+/*
+ * 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.
+ */
+package org.apache.empire.db.eclipse;
+
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.apache.empire.exceptions.ItemNotFoundException;
+import org.apache.empire.exceptions.ObjectNotValidException;
+import org.apache.empire.xml.XMLConfiguration;
+import org.apache.empire.xml.XMLUtil;
+import org.apache.log4j.xml.DOMConfigurator;
+import org.slf4j.Logger;
+import org.w3c.dom.Element;
+
+@XmlRootElement
+public class CodeGenConfig extends XMLConfiguration {
+	private static final Logger log = org.slf4j.LoggerFactory.getLogger(CodeGenConfig.class);
+
+	// the logging configuration root node name
+	private final String loggingNodeName = "log4j:configuration";
+
+	private String configTitle;
+
+	private String jdbcType;
+
+	private String jdbcClass;
+
+	private String jdbcURL;
+
+	private String jdbcServer;
+
+	private String jdbcPort;
+
+	private String jdbcSID;
+
+	private String jdbcUser;
+
+	private String jdbcPwd;
+
+	// generation options
+	/**
+	 * name of the database catalog (may be null)
+	 */
+	private String dbCatalog = null;
+
+	/**
+	 * name of the database schema (may be null)
+	 */
+	private String dbSchema = null;
+
+	/**
+	 * name of the table pattern (may be null)
+	 */
+	private String dbTablePattern = null;
+	/**
+	 * Name of the timestamp column used for optimistic locking (may be null)
+	 * e.g. "UPDATE_TIMESTAMP";
+	 */
+	private String timestampColumn = null;
+
+	/**
+	 * name of the target folder
+	 */
+	private String targetFolder;
+
+	/**
+	 * name of the template folder
+	 */
+	private String templateFolder = "configuration\\org.apache.empire\\templates\\";
+
+	/**
+	 * name of the target package
+	 */
+	private String packageName;
+
+	/**
+	 * name of the table target package
+	 */
+	private String tablePackageName;
+
+	/**
+	 * name of the record target package
+	 */
+	private String recordPackageName;
+
+	/**
+	 * name of the view target package
+	 */
+	private String viewPackageName;
+
+	/**
+	 * Target name of the generated database class. This class extends
+	 * DBDatabase.
+	 */
+	private String dbClassName;
+
+	/**
+	 * Target name of the generated table class. This class extends DBTable and
+	 * is the base class for all generated individual table classes.
+	 */
+	private String tableBaseName;
+
+	/**
+	 * Target name of the generated view class. This class extends DBView and is
+	 * the base class for all generated individual view classes.
+	 */
+	private String viewBaseName;
+
+	/**
+	 * Target name of the generated record class. This is a template class that
+	 * extends DBRecord as follows:<br/>
+	 * 
+	 * <pre>
+	 * XXRecord&lt;T extends XXTable&gt; extends DBRecord
+	 * </pre>
+	 * 
+	 * <br/>
+	 */
+	private String recordBaseName;
+
+	/**
+	 * Prefix used for table member declarations
+	 */
+	private String tableNamePrefix = "";
+
+	/**
+	 * Prefix used for view member declarations
+	 */
+	private String viewNamePrefix = "";
+
+	/**
+	 * Prefix used for column member declarations
+	 */
+	private String columnNamePrefix = "";
+
+	/**
+	 * Prefix used for generating table class names.<br/>
+	 * The Table name is appended after the prefix starting with captial letter
+	 * followed by lower case letters.<br/>
+	 * Occurrence an of underscore indicates a new word which will again start
+	 * with a capital letter.<br/>
+	 * e.g.<br/>
+	 * <ul>
+	 * <li>Table "names" -> Class "XXNames"</li>
+	 * <li>Table "flight_bookings" -> Class "XXFlightBookings"</li>
+	 * </ul>
+	 * Where XX is the prefix.
+	 */
+	private String tableClassPrefix = "";
+
+	/**
+	 * Suffix used for generating table class names.<br/>
+	 * The Table name is appended before the suffix starting with captial letter
+	 * followed by lower case letters.<br/>
+	 * Occurrence an of underscore indicates a new word which will again start
+	 * with a capital letter.<br/>
+	 * e.g.<br/>
+	 * <ul>
+	 * <li>Table "names" -> Class "NamesTable"</li>
+	 * <li>Table "flight_bookings" -> Class "FlightBookingsTable"</li>
+	 * </ul>
+	 * Where "Table" is the suffix.
+	 */
+	private String tableClassSuffix = "";
+
+	/**
+	 * Prefix used for generating view class names.<br/>
+	 * The Table name is appended after the prefix starting with captial letter
+	 * followed by lower case letters.<br/>
+	 * Occurrence an of underscore indicates a new word which will again start
+	 * with a capital letter.<br/>
+	 * See naming of table classes above.
+	 */
+	private String viewClassPrefix = "";
+
+	/**
+	 * Suffix used for generating view class names.<br/>
+	 * The View name is appended before the suffix starting with captial letter
+	 * followed by lower case letters.<br/>
+	 * Occurrence an of underscore indicates a new word which will again start
+	 * with a capital letter.<br/>
+	 * e.g.<br/>
+	 * <ul>
+	 * <li>View "names" -> Class "NamesView"</li>
+	 * <li>View "flight_bookings" -> Class "FlightBookingsView"</li>
+	 * </ul>
+	 * Where "View" is the suffix.
+	 */
+	private String viewClassSuffix = "";
+
+	/**
+	 * if TRUE table classes should be declared as inner classes of DBDatabase.
+	 * <br/>
+	 * if FALSE table classes should be declared as top level classes.
+	 */
+	private boolean nestTables = false;
+
+	/**
+	 * if TRUE view classes should be declared as inner classes of DBDatabase.
+	 * <br/>
+	 * if FALSE view classes should be declared as top level classes.
+	 */
+	private boolean nestViews = false;
+
+	/**
+	 * if TRUE record classes should have a getter and setter for each field.
+	 * <br/>
+	 * Otherwise getters / setters are omitted.
+	 */
+	private boolean createRecordProperties;
+
+	/**
+	 * true if names of tables and views should not be camel-cased
+	 */
+	private boolean preserverCharacterCase = false;
+
+	/**
+	 * true if names of foreign-key-relations should be preserved
+	 */
+	private boolean preserveRelationNames = false;
+
+	/**
+	 * Initialize the configuration.
+	 * 
+	 * @param filename
+	 *            the file to read
+	 */
+	public void init(String filename) {
+		// Read the properties file
+		super.init(filename, false);
+
+		// Init Logging
+		initLogging();
+
+		// Reader Provider Properties
+		readProperties(this, "properties");
+	}
+
+	/**
+	 * Init logging using Log4J's DOMConfigurator
+	 * 
+	 * @return
+	 */
+	private void initLogging() {
+		// Get configuration root node
+		Element rootNode = getRootNode();
+		if (rootNode == null) {
+			throw new ObjectNotValidException(getClass().getName());
+		}
+		// Find log configuration node
+		Element loggingNode = XMLUtil.findFirstChild(rootNode, this.loggingNodeName);
+		if (loggingNode == null) { // log configuration node not found
+			CodeGenConfig.log.error("Log configuration node {} has not been found. Logging has not been configured.",
+					this.loggingNodeName);
+			throw new ItemNotFoundException(this.loggingNodeName);
+		}
+		// Init Log4J
+		DOMConfigurator.configure(loggingNode);
+		// done
+		CodeGenConfig.log.info("Logging sucessfully configured from node {}.", this.loggingNodeName);
+	}
+
+	public String getJdbcClass() {
+		return this.jdbcClass;
+	}
+
+	public void setJdbcClass(String jdbcClass) {
+		this.jdbcClass = jdbcClass;
+	}
+
+	public String getJdbcURL() {
+		return this.jdbcURL;
+	}
+
+	public void setJdbcURL(String jdbcURL) {
+		this.jdbcURL = jdbcURL;
+	}
+
+	public String getJdbcUser() {
+		return this.jdbcUser;
+	}
+
+	public void setJdbcUser(String jdbcUser) {
+		this.jdbcUser = jdbcUser;
+	}
+
+	public String getJdbcPwd() {
+		return this.jdbcPwd;
+	}
+
+	public void setJdbcPwd(String jdbcPwd) {
+		this.jdbcPwd = jdbcPwd;
+	}
+
+	// ------- generation options -------
+
+	public String getDbCatalog() {
+		if(this.dbCatalog == "") {
+			this.dbCatalog = null;
+		}
+		return this.dbCatalog;
+	}
+
+	public void setDbCatalog(String dbCatalog) {
+		this.dbCatalog = dbCatalog;
+	}
+
+	public String getDbSchema() {
+		if(this.dbSchema == "") {
+			this.dbSchema = null;
+		}
+		return this.dbSchema;
+	}
+
+	public void setDbSchema(String dbSchema) {
+		this.dbSchema = dbSchema;
+	}
+
+	public String getDbTablePattern() {
+		return this.dbTablePattern;
+	}
+
+	public void setDbTablePattern(String dbTablePattern) {
+		this.dbTablePattern = dbTablePattern;
+	}
+
+	public String getTimestampColumn() {
+		return this.timestampColumn;
+	}
+
+	public void setTimestampColumn(String timestampColumn) {
+		this.timestampColumn = timestampColumn;
+	}
+
+	public String getTargetFolder() {
+		return this.targetFolder;
+	}
+
+	public void setTargetFolder(String targetFolder) {
+		this.targetFolder = targetFolder;
+	}
+
+	public String getTemplateFolder() {
+		return this.templateFolder;
+	}
+
+	public void setTemplateFolder(String templateFolder) {
+		this.templateFolder = templateFolder;
+	}
+
+	public String getPackageName() {
+		return this.packageName;
+	}
+
+	public void setPackageName(String packageName) {
+		this.packageName = packageName;
+	}
+
+	public String getTablePackageName() {
+		return fallback(this.tablePackageName, "tables");
+	}
+
+	public void setTablePackageName(String tablePackageName) {
+		this.tablePackageName = tablePackageName;
+	}
+
+	public String getRecordPackageName() {
+		return fallback(this.recordPackageName, "records");
+	}
+
+	public void setRecordPackageName(String recordPackageName) {
+		this.recordPackageName = recordPackageName;
+	}
+
+	public String getViewPackageName() {
+		return fallback(this.viewPackageName, "views");
+	}
+
+	public void setViewPackageName(String viewPackageName) {
+		this.viewPackageName = viewPackageName;
+	}
+
+	public String getDbClassName() {
+		return this.dbClassName;
+	}
+
+	public void setDbClassName(String dbClassName) {
+		this.dbClassName = dbClassName;
+	}
+
+	public String getTableBaseName() {
+		return this.tableBaseName;
+	}
+
+	public void setTableBaseName(String tableBaseName) {
+		this.tableBaseName = tableBaseName;
+	}
+
+	public String getViewBaseName() {
+		return this.viewBaseName;
+	}
+
+	public void setViewBaseName(String viewBaseName) {
+		this.viewBaseName = viewBaseName;
+	}
+
+	public String getRecordBaseName() {
+		return this.recordBaseName;
+	}
+
+	public void setRecordBaseName(String recordBaseName) {
+		this.recordBaseName = recordBaseName;
+	}
+
+	public String getTableNamePrefix() {
+		return this.tableNamePrefix;
+	}
+
+	public void setTableNamePrefix(String tableNamePrefix) {
+		this.tableNamePrefix = tableNamePrefix;
+	}
+
+	public String getTableClassPrefix() {
+		return this.tableClassPrefix;
+	}
+
+	public void setTableClassPrefix(String tableClassPrefix) {
+		this.tableClassPrefix = tableClassPrefix;
+	}
+
+	public String getTableClassSuffix() {
+		return this.tableClassSuffix;
+	}
+
+	public void setTableClassSuffix(String tableClassSuffix) {
+		this.tableClassSuffix = tableClassSuffix;
+	}
+
+	public String getViewNamePrefix() {
+		return this.viewNamePrefix;
+	}
+
+	public void setViewNamePrefix(String viewNamePrefix) {
+		this.viewNamePrefix = viewNamePrefix;
+	}
+
+	public String getViewClassPrefix() {
+		return this.viewClassPrefix;
+	}
+
+	public void setViewClassPrefix(String viewClassPrefix) {
+		this.viewClassPrefix = viewClassPrefix;
+	}
+
+	public String getViewClassSuffix() {
+		return this.viewClassSuffix;
+	}
+
+	public void setViewClassSuffix(String viewClassSuffix) {
+		this.viewClassSuffix = viewClassSuffix;
+	}
+
+	public String getColumnNamePrefix() {
+		return this.columnNamePrefix;
+	}
+
+	public void setColumnNamePrefix(String columnNamePrefix) {
+		this.columnNamePrefix = columnNamePrefix;
+	}
+
+	public boolean isNestTables() {
+		return this.nestTables;
+	}
+
+	public void setNestTables(boolean nestTables) {
+		this.nestTables = nestTables;
+	}
+
+	public boolean isNestViews() {
+		return this.nestViews;
+	}
+
+	public void setNestViews(boolean nestViews) {
+		this.nestViews = nestViews;
+	}
+
+	public boolean isCreateRecordProperties() {
+		return this.createRecordProperties;
+	}
+
+	public void setCreateRecordProperties(boolean createRecordProperties) {
+		this.createRecordProperties = createRecordProperties;
+	}
+
+	public boolean isPreserverCharacterCase() {
+		return this.preserverCharacterCase;
+	}
+
+	public void setPreserverCharacterCase(boolean preserverCharacterCase) {
+		this.preserverCharacterCase = preserverCharacterCase;
+	}
+
+	public boolean isPreserveRelationNames() {
+		return this.preserveRelationNames;
+	}
+
+	public void setPreserveRelationNames(boolean preserveRelationNames) {
+		this.preserveRelationNames = preserveRelationNames;
+	}
+
+	private String fallback(String packageName, String defaultSubpackage) {
+		String pkg = packageName;
+		if (pkg == null && this.packageName != null) {
+			pkg = this.packageName + "." + defaultSubpackage;
+		}
+		return pkg;
+	}
+
+	public String getConfigTitle() {
+		return this.configTitle;
+	}
+
+	public void setConfigTitle(String configTitle) {
+		this.configTitle = configTitle;
+	}
+
+	public String getJdbcType() {
+		return this.jdbcType;
+	}
+
+	public void setJdbcType(String jdbcType) {
+		this.jdbcType = jdbcType;
+	}
+
+	public String getJdbcServer() {
+		return this.jdbcServer;
+	}
+
+	public void setJdbcServer(String jdbcServer) {
+		this.jdbcServer = jdbcServer;
+	}
+
+	public String getJdbcPort() {
+		return this.jdbcPort;
+	}
+
+	public void setJdbcPort(String jdbcPort) {
+		this.jdbcPort = jdbcPort;
+	}
+
+	public String getJdbcSID() {
+		return this.jdbcSID;
+	}
+
+	public void setJdbcSID(String jdbcSID) {
+		this.jdbcSID = jdbcSID;
+	}
+}

http://git-wip-us.apache.org/repos/asf/empire-db/blob/83302f08/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/Plugin.java
----------------------------------------------------------------------
diff --git a/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/Plugin.java b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/Plugin.java
new file mode 100644
index 0000000..905cfef
--- /dev/null
+++ b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/Plugin.java
@@ -0,0 +1,190 @@
+/*
+ * 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.
+ */
+package org.apache.empire.db.eclipse;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.empire.db.eclipse.model.JdbcDriverClass;
+import org.apache.empire.db.eclipse.service.ConfigFileService;
+import org.apache.empire.db.eclipse.service.ConfigFileServiceImpl;
+import org.apache.empire.db.eclipse.service.MessageService;
+import org.apache.empire.db.eclipse.service.MessageServiceImpl;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Plugin extends AbstractUIPlugin
+{
+    private static final Logger                log = LoggerFactory.getLogger(Plugin.class);
+    // The shared instance
+    private static Plugin                      plugin;
+
+    private final MessageService               messageService;
+
+    private final ConfigFileService            configFileService;
+
+    private final Map<String, JdbcDriverClass> driverClasses;
+
+    /**
+     * The constructor
+     */
+    public Plugin()
+    {
+        this.messageService = new MessageServiceImpl(Locale.ENGLISH);
+        // check config dir
+        File checkConfigDir = new File(PluginConsts.CONFIG_DIR_PATH, PluginConsts.CONFIG_DIR);
+        if (!checkConfigDir.exists())
+        {
+            checkConfigDir.mkdirs();
+        }
+        // check default config file
+        checkConfigFile(PluginConsts.DEFAULT_CONFIG_FILE);
+        // check database generation templates
+        checkConfigFile(PluginConsts.TEMPLATE_BASE_RECORD);
+        checkConfigFile(PluginConsts.TEMPLATE_BASE_TABLE);
+        checkConfigFile(PluginConsts.TEMPLATE_BASE_VIEW);
+        checkConfigFile(PluginConsts.TEMPLATE_DATABASE);
+        checkConfigFile(PluginConsts.TEMPLATE_RECORD);
+        checkConfigFile(PluginConsts.TEMPLATE_TABLE);
+        checkConfigFile(PluginConsts.TEMPLATE_VIEW);
+
+        this.configFileService = new ConfigFileServiceImpl(checkConfigDir);
+        this.driverClasses = new HashMap<String, JdbcDriverClass>();
+        this.driverClasses.put("Oracle", new JdbcDriverClass("oracle.jdbc.driver.OracleDriver", "jdbc:oracle:thin:@%s:%s:%s"));
+        this.driverClasses.put("Microsoft SQL Server", new JdbcDriverClass("com.microsoft.sqlserver.jdbc.SQLServerDriver",
+                                                                           "jdbc:sqlserver://%s:%s;databaseName=%s"));
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+     */
+    @Override
+    public void start(BundleContext context)
+        throws Exception
+    {
+        Plugin.log.debug("Start empire-db-codegen plugin");
+        super.start(context);
+        Plugin.plugin = this;
+
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+     */
+    @Override
+    public void stop(BundleContext context)
+        throws Exception
+    {
+        Plugin.log.debug("Stop empire-db-codegen plugin");
+        Plugin.plugin = null;
+        super.stop(context);
+    }
+
+    /**
+     * Returns the shared instance
+     *
+     * @return the shared instance
+     */
+    public static Plugin getInstance()
+    {
+        return Plugin.plugin;
+    }
+
+    public MessageService getMessageService()
+    {
+        return this.messageService;
+    }
+
+    public ConfigFileService getConfigFileService()
+    {
+        return this.configFileService;
+    }
+
+    public Map<String, JdbcDriverClass> getDriverClasses()
+    {
+        return this.driverClasses;
+    }
+
+    public String[] getDriverClassNames()
+    {
+        String[] driverClassNames = new String[this.driverClasses.size() + 1];
+        driverClassNames[0] = " ";
+        int i = 1;
+        for (String key : this.driverClasses.keySet())
+        {
+            driverClassNames[i] = key;
+            i++;
+        }
+        return driverClassNames;
+    }
+
+    public Connection getJDBCConnection(String connectionType, String jdbcServer, String jdbcPort, String jdbcDatabase, String jdbcUser,
+                                        String jdbcPwd)
+        throws SQLException
+    {
+        JdbcDriverClass jdbcDriverClass = this.driverClasses.get(connectionType);
+        String jdbcClass = jdbcDriverClass.getJdbcClass();
+        String jdbcURL = String.format(jdbcDriverClass.getJdbcUrl(), jdbcServer, jdbcPort, jdbcDatabase);
+        Plugin.log.info("Connecting to Database'" + jdbcURL + "' / User=" + jdbcUser);
+        Connection conn = null;
+        try
+        {
+            Class.forName(jdbcClass).newInstance();
+        }
+        catch (Exception ex)
+        {
+            throw new SQLException("Could not load database driver: " + jdbcClass);
+        }
+        conn = DriverManager.getConnection(jdbcURL, jdbcUser, jdbcPwd);
+        Plugin.log.info("Connected successfully");
+        return conn;
+    }
+
+    private void checkConfigFile(String filename)
+    {
+        File configFile = new File(PluginConsts.CONFIG_DIR_PATH, filename);
+        if (!configFile.exists())
+        {
+            URL inputUrl = Plugin.class.getClassLoader().getResource(filename);
+            try
+            {
+                FileUtils.copyURLToFile(inputUrl, configFile);
+            }
+            catch (IOException e)
+            {
+                Plugin.log.error("Could not copy resoucres file in configuration directory! %s", e.getMessage());
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/empire-db/blob/83302f08/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/PluginConsts.java
----------------------------------------------------------------------
diff --git a/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/PluginConsts.java b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/PluginConsts.java
new file mode 100644
index 0000000..479cbc5
--- /dev/null
+++ b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/PluginConsts.java
@@ -0,0 +1,47 @@
+/*
+ * 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.
+ */
+package org.apache.empire.db.eclipse;
+
+public class PluginConsts
+{
+    // The plug-in ID
+    public static final String PLUGIN_ID            = "empire-db-eclipse-codegen";
+
+    public static int          BUTTON_NEXT_ID       = 2;
+
+    public static int          BUTTON_PREVIOUS_ID   = 3;
+
+    public static int          BUTTON_OK            = 4;
+
+    public static int          BUTTON_CANCEL        = 5;
+
+    public static final String CONFIG_DIR_PATH      = "configuration/org.apache.empire";
+
+    public static final String CONFIG_DIR           = "config";
+
+    public static final String DEFAULT_CONFIG_FILE  = "defaultConfig.xml";
+
+    public static final String TEMPLATE_BASE_RECORD = "templates/BaseRecord.vm";
+    public static final String TEMPLATE_BASE_TABLE  = "templates/BaseTable.vm";
+    public static final String TEMPLATE_BASE_VIEW   = "templates/BaseView.vm";
+    public static final String TEMPLATE_DATABASE    = "templates/Database.vm";
+    public static final String TEMPLATE_RECORD      = "templates/Record.vm";
+    public static final String TEMPLATE_TABLE       = "templates/Table.vm";
+    public static final String TEMPLATE_VIEW        = "templates/View.vm";
+}

http://git-wip-us.apache.org/repos/asf/empire-db/blob/83302f08/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/handler/ConfigDialogHandler.java
----------------------------------------------------------------------
diff --git a/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/handler/ConfigDialogHandler.java b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/handler/ConfigDialogHandler.java
new file mode 100644
index 0000000..da36e1d
--- /dev/null
+++ b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/handler/ConfigDialogHandler.java
@@ -0,0 +1,48 @@
+/*
+ * 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.
+ */
+package org.apache.empire.db.eclipse.handler;
+
+import org.apache.empire.db.codegen.CodeGenerator;
+import org.apache.empire.db.eclipse.Plugin;
+import org.apache.empire.db.eclipse.ui.ConfigurationDialog;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.window.Window;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+public class ConfigDialogHandler extends AbstractHandler
+{
+    public Object execute(ExecutionEvent event)
+        throws ExecutionException
+    {
+    	// loads the configurations
+        Plugin.getInstance().getConfigFileService().refreshConfigList();
+        // create new window
+        IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
+        ConfigurationDialog dialog = new ConfigurationDialog(window.getShell());
+        if (dialog.open() == Window.OK)
+        {
+        	// start the class cration
+            CodeGenerator.main(new String[] { dialog.getConfigFileAbsolutPath() });
+        }
+        return null;
+    }
+}

http://git-wip-us.apache.org/repos/asf/empire-db/blob/83302f08/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/model/ConfigFile.java
----------------------------------------------------------------------
diff --git a/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/model/ConfigFile.java b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/model/ConfigFile.java
new file mode 100644
index 0000000..a810733
--- /dev/null
+++ b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/model/ConfigFile.java
@@ -0,0 +1,64 @@
+/*
+ * 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.
+ */
+package org.apache.empire.db.eclipse.model;
+
+import org.apache.empire.db.eclipse.CodeGenConfig;
+
+public class ConfigFile {
+
+	private String uuid;
+
+	private String filename;
+	
+	private CodeGenConfig codeGenConfig;
+	
+	public ConfigFile(CodeGenConfig codeGenConfig) {
+		this.codeGenConfig = codeGenConfig;
+	}
+	
+	public ConfigFile(String filename, String uuid, CodeGenConfig pluginCodeGenConfig) {
+		this.filename = filename;
+		this.uuid = uuid;
+		this.codeGenConfig = pluginCodeGenConfig;
+	}
+
+	public void setUuid(String uuid) {
+		this.uuid = uuid;
+	}
+	
+	public String getUuid() {
+		return uuid;
+	}
+	
+	public String getFilename() {
+		return filename;
+	}
+
+	public void setFilename(String filename) {
+		this.filename = filename;
+	}
+
+	public CodeGenConfig getCodeGenConfig() {
+		return codeGenConfig;
+	}
+
+	public void setCodeGenConfig(CodeGenConfig codeGenConfig) {
+		this.codeGenConfig = codeGenConfig;
+	}
+}

http://git-wip-us.apache.org/repos/asf/empire-db/blob/83302f08/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/model/JdbcDriverClass.java
----------------------------------------------------------------------
diff --git a/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/model/JdbcDriverClass.java b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/model/JdbcDriverClass.java
new file mode 100644
index 0000000..52451a0
--- /dev/null
+++ b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/model/JdbcDriverClass.java
@@ -0,0 +1,39 @@
+/*
+ * 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.
+ */
+package org.apache.empire.db.eclipse.model;
+
+public class JdbcDriverClass {
+
+	private final String jdbcClass;
+	
+	private final String jdbcUrl;
+	
+	public JdbcDriverClass(String jdbcClass, String jdbcUrl) {
+		this.jdbcClass = jdbcClass;
+		this.jdbcUrl = jdbcUrl;
+	}
+	
+	public String getJdbcClass() {
+		return jdbcClass;
+	}
+	
+	public String getJdbcUrl() {
+		return jdbcUrl;
+	}
+}

http://git-wip-us.apache.org/repos/asf/empire-db/blob/83302f08/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/service/ConfigFileService.java
----------------------------------------------------------------------
diff --git a/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/service/ConfigFileService.java b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/service/ConfigFileService.java
new file mode 100644
index 0000000..11ccea4
--- /dev/null
+++ b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/service/ConfigFileService.java
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ */
+package org.apache.empire.db.eclipse.service;
+
+import org.apache.empire.db.eclipse.model.ConfigFile;
+
+public interface ConfigFileService
+{
+    public boolean saveConfig(ConfigFile config);
+
+    public ConfigFile getConfig(String configTitle);
+
+    public boolean deleteConfig(String uuid);
+
+    public void refreshConfigList();
+
+    public String[] getConfigTitles();
+    
+    public ConfigFile getDefaultConfig();
+    
+    public String getConfigFilePath(String uuid);
+}

http://git-wip-us.apache.org/repos/asf/empire-db/blob/83302f08/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/service/ConfigFileServiceImpl.java
----------------------------------------------------------------------
diff --git a/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/service/ConfigFileServiceImpl.java b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/service/ConfigFileServiceImpl.java
new file mode 100644
index 0000000..bbc8b7f
--- /dev/null
+++ b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/service/ConfigFileServiceImpl.java
@@ -0,0 +1,234 @@
+/*
+ * 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.
+ */
+package org.apache.empire.db.eclipse.service;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.Marshaller;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.apache.empire.commons.StringUtils;
+import org.apache.empire.db.eclipse.CodeGenConfig;
+import org.apache.empire.db.eclipse.Plugin;
+import org.apache.empire.db.eclipse.PluginConsts;
+import org.apache.empire.db.eclipse.model.ConfigFile;
+import org.apache.empire.db.eclipse.model.JdbcDriverClass;
+import org.apache.empire.xml.XMLWriter;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+public class ConfigFileServiceImpl implements ConfigFileService
+{
+    private Map<String, ConfigFile> configurationgs;
+
+    private final File              directory;
+
+    public ConfigFileServiceImpl(File configDir)
+    {
+        this.directory = configDir;
+    }
+
+    public boolean saveConfig(ConfigFile config)
+    {
+        ConfigFile configFile = this.configurationgs.get(config.getUuid());
+        if (configFile == null)
+        {
+            configFile = config;
+            configFile.setFilename(config.getCodeGenConfig().getConfigTitle() + "_" + Calendar.getInstance().getTimeInMillis()
+                                   + ".xml");
+            configFile.setUuid(UUID.randomUUID().toString());
+            this.configurationgs.put(configFile.getUuid(), configFile);
+        }
+        else
+        {
+            configFile.setCodeGenConfig(config.getCodeGenConfig());
+        }
+        try
+        {
+            File file = new File(this.directory, configFile.getFilename());
+            if (!file.exists())
+            {
+                file.createNewFile();
+            }
+            // build url string
+            CodeGenConfig pluginConfig = configFile.getCodeGenConfig();
+            if (!StringUtils.isEmpty(pluginConfig.getJdbcType()))
+            {
+                JdbcDriverClass driver = Plugin.getInstance().getDriverClasses().get(pluginConfig.getJdbcType());
+                pluginConfig.setJdbcURL(String.format(driver.getJdbcUrl(), pluginConfig.getJdbcServer(), pluginConfig.getJdbcPort(),
+                                                      pluginConfig.getJdbcSID()));
+                pluginConfig.setJdbcClass(driver.getJdbcClass());
+            }
+            else
+            {
+                pluginConfig.setJdbcURL("");
+            }
+            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+            DocumentBuilder db = dbf.newDocumentBuilder();
+            Document document = db.newDocument();
+            Element configElement = document.createElement("config");
+            document.appendChild(configElement);
+            // Marshal the Object to a Document
+            JAXBContext jc = JAXBContext.newInstance(CodeGenConfig.class);
+            Marshaller marshaller = jc.createMarshaller();
+            marshaller.marshal(pluginConfig, configElement);
+            document.renameNode(configElement.getFirstChild(), configElement.getFirstChild().getNamespaceURI(), "properties");
+            configElement.appendChild(createLogginNode(document));
+            XMLWriter writer = new XMLWriter(new FileOutputStream(file));
+            writer.print(document);
+        }
+        catch (Exception e)
+        {
+            return false;
+        }
+        return true;
+    }
+
+    private Element createLogginNode(Document document)
+    {
+        Element log4j = document.createElement("log4j:configuration");
+        log4j.setAttribute("xmlns:log4j", "http://jakarta.apache.org/log4j/");
+        Element appender = document.createElement("appender");
+        appender.setAttribute("name", "default");
+        appender.setAttribute("class", "org.apache.log4j.ConsoleAppender");
+        Element layout = document.createElement("layout");
+        layout.setAttribute("class", "org.apache.log4j.PatternLayout");
+        Element param = document.createElement("param");
+        param.setAttribute("name", "ConversionPattern");
+        param.setAttribute("value", "%-5p [%d{yyyy/MM/dd HH:mm}]: %m        at %l %n");
+        layout.appendChild(param);
+        appender.appendChild(layout);
+        log4j.appendChild(appender);
+
+        Element logger = document.createElement("logger");
+        logger.setAttribute("name", "org.apache.empire.commons");
+        logger.setAttribute("additivity", "false");
+        Element level = document.createElement("level");
+        level.setAttribute("value", "warn");
+        Element loggerAppender = document.createElement("appender-ref");
+        loggerAppender.setAttribute("ref", "default");
+        logger.appendChild(level);
+        logger.appendChild(loggerAppender);
+        log4j.appendChild(logger);
+
+        Element root = document.createElement("root");
+        Element priority = document.createElement("priority");
+        priority.setAttribute("value", "info");
+        Element rootAppender = document.createElement("appender-ref");
+        rootAppender.setAttribute("ref", "default");
+        root.appendChild(priority);
+        root.appendChild(rootAppender);
+        log4j.appendChild(root);
+
+        return log4j;
+    }
+
+    public ConfigFile getConfig(String configTitle)
+    {
+        for (ConfigFile configFile : this.configurationgs.values())
+        {
+            if (configFile.getCodeGenConfig().getConfigTitle().equals(configTitle))
+            {
+                return configFile;
+            }
+        }
+        return null;
+    }
+
+    public boolean deleteConfig(String uuid)
+    {
+        ConfigFile configFile = this.configurationgs.get(uuid);
+        if (configFile == null)
+        {
+            return false;
+        }
+        File file = new File(this.directory, configFile.getFilename());
+        boolean deleted = file.delete();
+        if (deleted)
+        {
+            this.configurationgs.remove(configFile);
+        }
+        return deleted;
+    }
+
+    public void refreshConfigList()
+    {
+        File[] files = this.directory.listFiles();
+        this.configurationgs = new HashMap<String, ConfigFile>();
+        if (files != null)
+        {
+            for (File file : files)
+            {
+                if (file.isFile())
+                {
+                    CodeGenConfig config = new CodeGenConfig();
+                    try
+                    {
+                        config.init(file.getAbsolutePath());
+                    }
+                    catch (Exception e)
+                    {
+                        continue;
+                    }
+                    String uuid = UUID.randomUUID().toString();
+                    this.configurationgs.put(uuid, new ConfigFile(file.getName(), uuid, config));
+                }
+            }
+        }
+    }
+
+    public String[] getConfigTitles()
+    {
+        List<String> configTitles = new ArrayList<String>();
+        for (ConfigFile configFile : this.configurationgs.values())
+        {
+            configTitles.add(configFile.getCodeGenConfig().getConfigTitle());
+        }
+        Collections.sort(configTitles);
+        return configTitles.toArray(new String[configTitles.size()]);
+    }
+
+    public ConfigFile getDefaultConfig()
+    {
+        CodeGenConfig defaultConfig = new CodeGenConfig();
+        File file = new File(PluginConsts.CONFIG_DIR_PATH, PluginConsts.DEFAULT_CONFIG_FILE);
+        defaultConfig.init(file.getAbsolutePath());
+        return new ConfigFile(defaultConfig);
+    }
+
+    public String getConfigFilePath(String uuid)
+    {
+        ConfigFile config = this.configurationgs.get(uuid);
+        if (config == null)
+        {
+            return null;
+        }
+        return new File(new File(PluginConsts.CONFIG_DIR_PATH, PluginConsts.CONFIG_DIR), config.getFilename()).getAbsolutePath();
+    }
+}

http://git-wip-us.apache.org/repos/asf/empire-db/blob/83302f08/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/service/MessageService.java
----------------------------------------------------------------------
diff --git a/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/service/MessageService.java b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/service/MessageService.java
new file mode 100644
index 0000000..b76fb2f
--- /dev/null
+++ b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/service/MessageService.java
@@ -0,0 +1,26 @@
+/*
+ * 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.
+ */
+package org.apache.empire.db.eclipse.service;
+
+public interface MessageService
+{
+    String resolveMessageKey(String key);
+
+    String resolveMessageKey(String key, Object... params);
+}

http://git-wip-us.apache.org/repos/asf/empire-db/blob/83302f08/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/service/MessageServiceImpl.java
----------------------------------------------------------------------
diff --git a/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/service/MessageServiceImpl.java b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/service/MessageServiceImpl.java
new file mode 100644
index 0000000..1cc4dc8
--- /dev/null
+++ b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/service/MessageServiceImpl.java
@@ -0,0 +1,52 @@
+/*
+ * 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.
+ */
+package org.apache.empire.db.eclipse.service;
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import java.util.ResourceBundle;
+
+public class MessageServiceImpl implements MessageService
+{
+    private final Locale       locale;
+
+    public static List<Locale> supportedLocales = new ArrayList<Locale>();
+
+    static
+    {
+        MessageServiceImpl.supportedLocales.add(Locale.ENGLISH);
+    }
+
+    public MessageServiceImpl(Locale locale)
+    {
+        this.locale = locale;
+    }
+
+    public String resolveMessageKey(String key)
+    {
+        return ResourceBundle.getBundle("lang.messages", this.locale).getString(key);
+    }
+
+    public String resolveMessageKey(String key, Object... params)
+    {
+        return MessageFormat.format(resolveMessageKey(key), params);
+    }
+}

http://git-wip-us.apache.org/repos/asf/empire-db/blob/83302f08/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/ui/ClassParameterPage.java
----------------------------------------------------------------------
diff --git a/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/ui/ClassParameterPage.java b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/ui/ClassParameterPage.java
new file mode 100644
index 0000000..1660b62
--- /dev/null
+++ b/empire-db-eclipse-codegen/src/main/java/org/apache/empire/db/eclipse/ui/ClassParameterPage.java
@@ -0,0 +1,272 @@
+/*
+ * 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.
+ */
+package org.apache.empire.db.eclipse.ui;
+
+import org.apache.empire.db.eclipse.CodeGenConfig;
+import org.apache.empire.db.eclipse.Plugin;
+import org.apache.empire.db.eclipse.util.SWTResourceManager;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+public class ClassParameterPage extends Page
+{
+    private final Text   ctlDbClassName;
+    private final Text   ctlTableBaseName;
+    private final Text   ctlViewBaseName;
+    private final Text   ctlRecordBaseName;
+    private final Text   ctlTableNamePrefix;
+    private final Text   ctlTableClassPrefix;
+    private final Text   ctlTableClassSuffix;
+    private final Text   ctlViewNamePrefix;
+    private final Text   ctlViewClassPrefix;
+    private final Text   ctlViewClassSuffix;
+    private final Text   ctlColumnNamePrefix;
+    private final Label  lblClassParameter;
+    private final Label  lblTableBaseName;
+    private final Label  lblViewBaseName;
+    private final Label  lblRecordBaseName;
+    private final Label  lblDbClassName;
+
+    private final Button ctlNestTables;
+    private final Button ctlNestViews;
+    private final Button ctlCreateRecordProperties;
+    private final Button ctlPreserverCharCase;
+    private final Button ctlPreserveRelationNames;
+
+    public ClassParameterPage(Composite parent, int style)
+    {
+        super(parent, style);
+
+        this.lblDbClassName = new Label(this, SWT.NONE);
+        this.lblDbClassName.setText(Plugin.getInstance().getMessageService().resolveMessageKey("dbClassName"));
+        this.lblDbClassName.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.dbClassName"));
+        this.lblDbClassName.setBounds(15, 50, 145, 17);
+
+        this.ctlDbClassName = new Text(this, SWT.BORDER);
+        this.ctlDbClassName.setBounds(185, 47, 250, 21);
+        this.ctlDbClassName.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.dbClassName"));
+
+        this.lblClassParameter = new Label(this, SWT.NONE);
+        this.lblClassParameter.setAlignment(SWT.CENTER);
+        this.lblClassParameter.setText(Plugin.getInstance().getMessageService().resolveMessageKey("classParameter"));
+        this.lblClassParameter.setFont(SWTResourceManager.getFont("Segoe UI", 12, SWT.BOLD));
+        this.lblClassParameter.setBounds(0, 10, 418, 21);
+
+        this.lblTableBaseName = new Label(this, SWT.NONE);
+        this.lblTableBaseName.setText(Plugin.getInstance().getMessageService().resolveMessageKey("tableBaseName"));
+        this.lblTableBaseName.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.tableBaseName"));
+        this.lblTableBaseName.setBounds(15, 76, 145, 17);
+
+        this.ctlTableBaseName = new Text(this, SWT.BORDER);
+        this.ctlTableBaseName.setBounds(185, 73, 250, 21);
+        this.ctlTableBaseName.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.tableBaseName"));
+
+        this.lblViewBaseName = new Label(this, SWT.NONE);
+        this.lblViewBaseName.setText(Plugin.getInstance().getMessageService().resolveMessageKey("viewBaseName"));
+        this.lblViewBaseName.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.viewBaseName"));
+        this.lblViewBaseName.setBounds(15, 102, 145, 17);
+
+        this.ctlViewBaseName = new Text(this, SWT.BORDER);
+        this.ctlViewBaseName.setBounds(185, 99, 250, 21);
+        this.ctlViewBaseName.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.viewBaseName"));
+
+        this.lblRecordBaseName = new Label(this, SWT.NONE);
+        this.lblRecordBaseName.setText(Plugin.getInstance().getMessageService().resolveMessageKey("recordBaseName"));
+        this.lblRecordBaseName.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.recordBaseName"));
+        this.lblRecordBaseName.setBounds(15, 128, 145, 17);
+
+        this.ctlRecordBaseName = new Text(this, SWT.BORDER);
+        this.ctlRecordBaseName.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.recordBaseName"));
+        this.ctlRecordBaseName.setBounds(185, 125, 250, 21);
+
+        Label lblTableNamePrefix = new Label(this, SWT.NONE);
+        lblTableNamePrefix.setText(Plugin.getInstance().getMessageService().resolveMessageKey("tableNamePrefix"));
+        lblTableNamePrefix.setBounds(15, 154, 145, 17);
+        lblTableNamePrefix.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.tableNamePrefix"));
+
+        this.ctlTableNamePrefix = new Text(this, SWT.BORDER);
+        this.ctlTableNamePrefix.setBounds(185, 151, 250, 21);
+        this.ctlTableNamePrefix.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.tableNamePrefix"));
+
+        Label lblTableClassPrefix = new Label(this, SWT.NONE);
+        lblTableClassPrefix.setText(Plugin.getInstance().getMessageService().resolveMessageKey("tableClassPrefix"));
+        lblTableClassPrefix.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.tableClassPrefix"));
+        lblTableClassPrefix.setBounds(15, 180, 145, 17);
+
+        this.ctlTableClassPrefix = new Text(this, SWT.BORDER);
+        this.ctlTableClassPrefix.setBounds(185, 177, 250, 21);
+        this.ctlTableClassPrefix.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.tableClassPrefix"));
+
+        Label lblTableClassSuffix = new Label(this, SWT.NONE);
+        lblTableClassSuffix.setText(Plugin.getInstance().getMessageService().resolveMessageKey("tableClassSuffix"));
+        lblTableClassSuffix.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.tableClassSuffix"));
+        lblTableClassSuffix.setBounds(15, 206, 145, 17);
+
+        this.ctlTableClassSuffix = new Text(this, SWT.BORDER);
+        this.ctlTableClassSuffix.setBounds(185, 203, 250, 21);
+        this.ctlTableClassSuffix.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.tableClassSuffix"));
+
+        Label lblViewNamePrefix = new Label(this, SWT.NONE);
+        lblViewNamePrefix.setText(Plugin.getInstance().getMessageService().resolveMessageKey("viewNamePrefix"));
+        lblViewNamePrefix.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.viewNamePrefix"));
+        lblViewNamePrefix.setBounds(15, 232, 145, 17);
+
+        this.ctlViewNamePrefix = new Text(this, SWT.BORDER);
+        this.ctlViewNamePrefix.setBounds(185, 229, 250, 21);
+        this.ctlViewNamePrefix.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.viewNamePrefix"));
+
+        Label lblViewClassPrefix = new Label(this, SWT.NONE);
+        lblViewClassPrefix.setText(Plugin.getInstance().getMessageService().resolveMessageKey("viewClassPrefix"));
+        lblViewClassPrefix.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.viewClassPrefix"));
+        lblViewClassPrefix.setBounds(15, 258, 145, 17);
+
+        this.ctlViewClassPrefix = new Text(this, SWT.BORDER);
+        this.ctlViewClassPrefix.setBounds(185, 255, 250, 21);
+        this.ctlViewClassPrefix.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.viewClassPrefix"));
+
+        Label lblViewClassSuffix = new Label(this, SWT.NONE);
+        lblViewClassSuffix.setText(Plugin.getInstance().getMessageService().resolveMessageKey("viewClassSuffix"));
+        lblViewClassSuffix.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.viewClassSuffix"));
+        lblViewClassSuffix.setBounds(15, 285, 145, 17);
+
+        this.ctlViewClassSuffix = new Text(this, SWT.BORDER);
+        this.ctlViewClassSuffix.setBounds(185, 282, 250, 21);
+        this.ctlViewClassSuffix.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.viewClassSuffix"));
+
+        Label lblColumnNamePrefix = new Label(this, SWT.NONE);
+        lblColumnNamePrefix.setText(Plugin.getInstance().getMessageService().resolveMessageKey("columnNamePrefix"));
+        lblColumnNamePrefix.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.columnNamePrefix"));
+        lblColumnNamePrefix.setBounds(15, 312, 145, 17);
+
+        this.ctlColumnNamePrefix = new Text(this, SWT.BORDER);
+        this.ctlColumnNamePrefix.setBounds(185, 309, 250, 21);
+        this.ctlColumnNamePrefix.setToolTipText(Plugin.getInstance().getMessageService().resolveMessageKey("tooltip.columnNamePrefix"));
+
+        Group grpFlag = new Group(this, SWT.NONE);
+        grpFlag.setFont(SWTResourceManager.getFont("Segoe UI", 10, SWT.BOLD));
+        grpFlag.setText(Plugin.getInstance().getMessageService().resolveMessageKey("flagGroup"));
+        grpFlag.setBounds(5, 335, 440, 144);
+
+        this.ctlNestTables = new Button(grpFlag, SWT.CHECK);
+        this.ctlNestTables.setBounds(180, 22, 93, 16);
+
+        Label lblNestTables = new Label(grpFlag, SWT.NONE);
+        lblNestTables.setBounds(10, 23, 156, 15);
+        lblNestTables.setText(Plugin.getInstance().getMessageService().resolveMessageKey("nestTables"));
+
+        Label lblNestViews = new Label(grpFlag, SWT.NONE);
+        lblNestViews.setText(Plugin.getInstance().getMessageService().resolveMessageKey("nestViews"));
+        lblNestViews.setBounds(10, 45, 156, 15);
+
+        this.ctlNestViews = new Button(grpFlag, SWT.CHECK);
+        this.ctlNestViews.setBounds(180, 44, 93, 16);
+
+        Label lblCreateRecordProperties = new Label(grpFlag, SWT.NONE);
+        lblCreateRecordProperties.setText(Plugin.getInstance().getMessageService().resolveMessageKey("createRecordProperties"));
+        lblCreateRecordProperties.setBounds(10, 67, 156, 15);
+
+        this.ctlCreateRecordProperties = new Button(grpFlag, SWT.CHECK);
+        this.ctlCreateRecordProperties.setBounds(180, 66, 93, 16);
+
+        Label lblPreserverCharCase = new Label(grpFlag, SWT.NONE);
+        lblPreserverCharCase.setText(Plugin.getInstance().getMessageService().resolveMessageKey("preserverCharCase"));
+        lblPreserverCharCase.setBounds(10, 89, 156, 15);
+
+        this.ctlPreserverCharCase = new Button(grpFlag, SWT.CHECK);
+        this.ctlPreserverCharCase.setBounds(180, 88, 93, 16);
+
+        Label lblPreserveRelationNames = new Label(grpFlag, SWT.NONE);
+        lblPreserveRelationNames.setText(Plugin.getInstance().getMessageService().resolveMessageKey("preserveRelationNames"));
+        lblPreserveRelationNames.setBounds(10, 111, 156, 15);
+
+        this.ctlPreserveRelationNames = new Button(grpFlag, SWT.CHECK);
+        this.ctlPreserveRelationNames.setBounds(180, 110, 93, 16);
+    }
+
+    public void save(CodeGenConfig config)
+    {
+        config.setDbClassName(this.ctlDbClassName.getText());
+        config.setTableBaseName(this.ctlTableBaseName.getText());
+        config.setViewBaseName(this.ctlViewBaseName.getText());
+        config.setRecordBaseName(this.ctlRecordBaseName.getText());
+        config.setTableNamePrefix(this.ctlTableNamePrefix.getText());
+        config.setTableClassPrefix(this.ctlTableClassPrefix.getText());
+        config.setTableClassSuffix(this.ctlTableClassSuffix.getText());
+        config.setViewClassPrefix(this.ctlViewClassPrefix.getText());
+        config.setViewClassSuffix(this.ctlViewClassSuffix.getText());
+        config.setColumnNamePrefix(this.ctlColumnNamePrefix.getText());
+        config.setNestTables(this.ctlNestTables.getSelection());
+        config.setNestViews(this.ctlNestViews.getSelection());
+        config.setCreateRecordProperties(this.ctlCreateRecordProperties.getSelection());
+        config.setPreserverCharacterCase(this.ctlPreserverCharCase.getSelection());
+        config.setPreserveRelationNames(this.ctlPreserveRelationNames.getSelection());
+    }
+
+    public void load(CodeGenConfig config)
+    {
+        setControlText(this.ctlDbClassName, config.getDbClassName());
+        setControlText(this.ctlTableBaseName, config.getTableBaseName());
+        setControlText(this.ctlViewBaseName, config.getViewBaseName());
+        setControlText(this.ctlRecordBaseName, config.getRecordBaseName());
+        setControlText(this.ctlTableNamePrefix, config.getTableNamePrefix());
+        setControlText(this.ctlTableClassPrefix, config.getTableClassPrefix());
+        setControlText(this.ctlTableClassSuffix, config.getTableClassSuffix());
+        setControlText(this.ctlViewClassPrefix, config.getViewClassPrefix());
+        setControlText(this.ctlViewClassSuffix, config.getViewClassSuffix());
+        setControlText(this.ctlColumnNamePrefix, config.getColumnNamePrefix());
+        this.ctlNestTables.setSelection(config.isNestTables());
+        this.ctlNestViews.setSelection(config.isNestViews());
+        this.ctlCreateRecordProperties.setSelection(config.isCreateRecordProperties());
+        this.ctlPreserverCharCase.setSelection(config.isPreserverCharacterCase());
+        this.ctlPreserveRelationNames.setSelection(config.isPreserveRelationNames());
+    }
+
+    @Override
+    public void setEnabled(boolean enabled)
+    {
+        this.ctlDbClassName.setEnabled(enabled);
+        this.ctlTableBaseName.setEnabled(enabled);
+        this.ctlViewBaseName.setEnabled(enabled);
+        this.ctlRecordBaseName.setEnabled(enabled);
+        this.ctlTableNamePrefix.setEnabled(enabled);
+        this.ctlTableClassPrefix.setEnabled(enabled);
+        this.ctlTableClassSuffix.setEnabled(enabled);
+        this.ctlViewNamePrefix.setEnabled(enabled);
+        this.ctlViewClassPrefix.setEnabled(enabled);
+        this.ctlViewClassSuffix.setEnabled(enabled);
+        this.ctlColumnNamePrefix.setEnabled(enabled);
+        this.ctlNestTables.setEnabled(enabled);
+        this.ctlNestViews.setEnabled(enabled);
+        this.ctlCreateRecordProperties.setEnabled(enabled);
+        this.ctlPreserverCharCase.setEnabled(enabled);
+        this.ctlPreserveRelationNames.setEnabled(enabled);
+    }
+
+    public boolean checkRequiredFields()
+    {
+        return checkControlFilled(this.ctlDbClassName, this.lblDbClassName.getText())
+               && checkControlFilled(this.ctlTableBaseName, this.lblTableBaseName.getText())
+               && checkControlFilled(this.ctlViewBaseName, this.lblViewBaseName.getText())
+               && this.checkControlFilled(this.ctlRecordBaseName, this.lblRecordBaseName.getText());
+    }
+}